Моя рекурсивная функция не работает

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

И это результат:

учетная запись
Не совпадает

Это показывает, что он находит учетную запись имен родительских страниц, но не возвращает никаких данных. Я также тестировал возврат строки, но это тоже не работает.

Может ли кто-нибудь увидеть, что я делаю неправильно?

Теги:
recursion

2 ответа

3
Лучший ответ

Ваша проблема кажется, что вы вызываете свою функцию рекурсивно, но не возвращаете результат из вашего рекурсивного вызова.

Ваша линия

is_ancestor_of( $page_name, $parent );

вероятно, просто

return is_ancestor_of( $page_name, $parent );
  • 0
    Это не будет работать. Потому что при первом вызове он встретится с if ( $post->post_name == $page_name ) . И поскольку он повторился дважды, он все еще не возвращает никаких разумных данных.
  • 0
    Решил это. Удалив if ( $post->post_name == $page_name ) и добавив return true; в нижней части функции решили это :) Спасибо за совет :)
0

Попробуйте повторить $parent->post_name непосредственно перед следующей строкой, и вы можете лучше понять, что происходит.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню