Я создал рекурсивную функцию, чтобы узнать, является ли текущая страница дочерней страницей в дереве страниц.
Моя функция:
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';
}
И это результат:
учетная запись
Не совпадает
Это показывает, что он находит учетную запись имен родительских страниц, но не возвращает никаких данных. Я также тестировал возврат строки, но это тоже не работает.
Может ли кто-нибудь увидеть, что я делаю неправильно?
Ваша проблема кажется, что вы вызываете свою функцию рекурсивно, но не возвращаете результат из вашего рекурсивного вызова.
Ваша линия
is_ancestor_of( $page_name, $parent );
вероятно, просто
return is_ancestor_of( $page_name, $parent );
Попробуйте повторить $parent->post_name
непосредственно перед следующей строкой, и вы можете лучше понять, что происходит.
if ( $parent->post_name == $page_name ){
if ( $post->post_name == $page_name )
. И поскольку он повторился дважды, он все еще не возвращает никаких разумных данных.if ( $post->post_name == $page_name )
и добавивreturn true;
в нижней части функции решили это :) Спасибо за совет :)