Intereting Posts

Как правильно использовать get_pages () с 'child_of' для замены страницы на дочернюю страницу

Я изо всех сил пытаюсь получить результаты, которые я хочу здесь. После нескольких часов работы в Интернете я решил попросить вас всех о помощи.

Я пытаюсь посмотреть на детей текущей (запрашиваемой) страницы, и если страница имеет определенный термин в определенной таксономии, покажите содержимое дочерней страницы вместо первоначально запрошенной страницы. Итак, у меня есть следующее:

function site_child($pid) { $site_term = io_multi_get_var('term', null); //this is working properly from another function $args = array( 'child_of' => $pid, 'hierarchical' => 0, 'parent' => $pid, ); // http://codex.wordpress.org/Function_Reference/get_pages $children = get_pages($args); foreach ($children as $child) { if ( has_term($site_term,'site_assign',$child) ) { return $child->ID; } } return false; } // modify the PAGE main query add_action( 'pre_get_posts', 'replace_content_with_child' ); function replace_content_with_child( $query ) { if( $query->is_main_query() && !is_admin() && is_page() ) { if( $sitechild = site_child($query->query_vars['page_id']) ) { $query->query_vars['page_id'] = $sitechild; } } } 

Этот метод действительно отлично работает на домашней странице. Найдена дочерняя страница «Главная», и запрос изменен, чтобы показать эту страницу. Тем не менее, я не получаю никаких результатов, когда я пытаюсь использовать это / about-us / mission / например (даже если есть детская страница, соответствующая условиям). Если я var_dump ($ children), на странице «Главная», я получаю один результат: правильный. Если я var_dump ($ children) на другой странице, я просто получаю массив ВСЕХ страниц верхнего уровня (и ни одного из них нет). Что я здесь делаю неправильно? Я пробовал это без параметра «parent» и без параметра «child_of». Я не знаю, просто ли не нашли правильную комбинацию параметров, или если есть фундаментальный недостаток в том, что я пытаюсь …

Любая помощь приветствуется.

EDIT: Если я var_dump ($ pid) на любой странице, кроме домашней страницы, я получаю «int (0)». Я полагаю, что это корень проблемы. Что-то о $query->query_vars['page_id'] не дает фактического идентификатора текущей страницы.

Solutions Collecting From Web of "Как правильно использовать get_pages () с 'child_of' для замены страницы на дочернюю страницу"

Хорошо, я решил это. Мне просто нужно было заменить $query->query_vars['page_id'] на get_queried_object_id() и все работает!

Тем не менее, я просто прочитал ответ Питера, и, похоже, действительно, согласно кодексу, он не должен работать. Странно, потому что он работает. Думаю, мы увидим, что что-то сломается …