-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';
}

そしてこれが結果です:

アカウント-アカウント
一致なし

これは、親ページ名'account'を検出したが、データを返さないことを示しています。文字列を返すこともテストしましたが、それも機能していません。

誰かが私が間違っていることを見ることができますか?

4

2 に答える 2

3

問題は、関数を再帰的に呼び出しているが、再帰呼び出しの結果を返さないようです。

あなたのライン

is_ancestor_of( $page_name, $parent );

たぶん

return is_ancestor_of( $page_name, $parent );
于 2012-07-15T17:19:47.170 に答える
0

$parent->post_name次の行の直前にエコーしてみてください。そうすれば、何が起こっているのかをよりよく理解できるかもしれません。

 if ( $parent->post_name == $page_name ){
于 2012-07-15T17:19:23.523 に答える