@Alex-Broudy

Как вывести все дочерние страницы определенной страницы wordpress?

Здравствуйте!

Не судите строго, я новичок в этом деле и только постигаю азы )

В общем, создан кастомный тип записи "city" и созданы страницы порядка 300 городов, у каждого из которых есть разделы, например: Продукция или Производство. У каждого такого раздела может быть порядка 3-4 дочерних страниц.

Допустим, ссылка может иметь такой вид: example.com/city/moscow/products/portrets/boys-and-girls

Цель: на любой из дочерних страниц "products" в том числе и на самой странице "products" выводить список всех ее дочерних страниц.

Я пытаюсь определить url текущей страницы через $url = $_SERVER['REQUEST_URI']; (например даже если я нахожусь на странице "boys-and-girls")
далее разбиваю url на массив $products = explode("/", $url); и получаю строки:
[0] city
[1] moscow
[2] products
[3] portrets
[4] boys-and-girls

Из этого списка мне необходимо использовать значение [2]
далее пытаюсь вывести список нужных мне страниц, - конечный код выглядит так:
<?php 
$url = $_SERVER['REQUEST_URI'];
$products = explode("/", $url);
$my_parent_page = $products[2];
$args = array(
	'sort_order' => 'ASC',
	'sort_column' => 'rand',
	'hierarchical' => 1,
	'child_of' => $my_parent_page, 
	'parent' => -1,
	'post_type' => 'city',
	'post_status' => 'publish',
	);
	$pages = get_pages( $args );
		foreach( $pages as $post ){
		setup_postdata( $post );
	?>
	<a href="<?php the_permalink(); ?>"><?php the_field('my_title_field'); ?></a>
	<?php 
	}
	wp_reset_postdata();
?>


Но код в данном случае выводит все возможные страницы раздела "city", а не "products"

Буду рад любой помощи!
  • Вопрос задан
  • 3181 просмотр
Решения вопроса 1
deniscopro
@deniscopro Куратор тега WordPress
WordPress-разработчик, denisco.pro
Здравствуйте.

значит в коде нужно определять автоматически ID страницы "Продукция" и исходя из полученного ID выводить список всех его дочерних страниц на любой из дочерних страниц.


if ( wp_get_post_parent_id() )	{
	$ancestors = get_post_ancestors( get_the_ID() );
	$parent_id = end( $ancestors );
} else {
	$parent_id = get_the_ID();
}


Не тестировал код, но по идеи, в $parent_id и будет искомый ID родительской страницы на любой из дочерних страниц, включая саму родительскую страницу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Kozack
@Kozack Куратор тега WordPress
Thinking about a11y
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Оденьте трусы или снимите крестик.

Вы или начните читать документацию WordPress, разберитесь с тем, что такое WP_Query, Custom Post Types, Custom Taxonomies, Rewrite Rules, $query_vars, как WordPress обрабатывает запрос от начала до конца и тд, либо выбросьте WordPress и начните пилить так, как вам привычнее и удобнее - чистым PHP без каких-либо CMS (или на базе знакомого фреймворка). Потому что то, что вы пытаетесь сделать, это какой-то сюр. Перед тем, как садиться за столь нетривиальную задачу как создание региональной структуры на базе WP, необходимо начать с простого и понять как этот самый WP работает внутри. Не наоборот.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы