2012-07-15 62 views
-2

我創建了一個遞歸函數來確定當前頁面是否是頁面樹中頁面的子元素。我的遞歸函數不起作用

我的功能:

function is_ancestor_of($page_name = null, $post) { 

    if(is_null($page_name)) 
    return false; 

    // does it have a parent? 
    if (!isset($post->post_parent) OR $post->post_parent <= 0) 
    return false; 

    //Get parent page 
    $parent = wp_get_single_post($post->post_parent); 

    if ($parent->post_name == $page_name){ 
    echo $parent->post_name.' - '.$page_name; 
    return true; 
    } else { 
    is_ancestor_of($page_name, $parent); 
    } 
} 

這是我與測試代碼:

$is_parent = is_ancestor_of('account', $post); 

if(!$is_parent) { 
    echo '<br/> No match'; 
} 

這是結果:

賬戶 - 賬戶
不匹配

這表明它找到父頁面名稱的「帳戶」,但它沒有返回任何數據。我也測試過返回一個字符串,但那也行不通。

任何人都可以看到我做錯了什麼?

回答

3

您的問題似乎是你遞歸調用你的函數而不是從你的遞歸調用返回的結果。

你行

is_ancestor_of($page_name, $parent); 

應該可能只是

return is_ancestor_of($page_name, $parent); 
+0

這是行不通的。因爲你第一次調用它,它會運行到'if($ post-> post_name == $ page_name)'。而且由於它已經遞歸了兩次,它仍然沒有返回任何明智的數據。 – Steven 2012-07-15 17:28:32

+0

解決了它。通過刪除'if($ post-> post_name == $ page_name)'並添加'return true;'在函數底部解決了它:)感謝提示:) – Steven 2012-07-15 17:33:37

0

嘗試在下一行之前回顯$parent->post_name,並且您可能會更好地瞭解所發生的事情。

if ($parent->post_name == $page_name){