Вопрос или проблема
Я пытаюсь создать раздел на своем шаблоне страницы, который отображает все родительские (верхнего уровня) страницы с перечисленными ниже дочерними страницами, но только от того же автора, что и просматриваемая в данный момент страница.
У меня есть код ниже, который отлично отображает страницы верхнего уровня и их дочерние страницы, но мне нужно внести изменения, чтобы показывать только страницы одного автора.
Мне также нужно убедиться, что отображается и просматриваемая страница.
Могу ли я добавить что-то простое к тому, что у меня есть ниже?
<?php
$args = array(
'sort_column' => 'menu_order',
'parent' => 0,
);
$pages = get_pages($args);
foreach($pages as $page){
?>
<ul>
<li>
<?php
echo '<a href="' . get_permalink( $page->ID ) . '">' . $page- >post_title . '</a>';
?>
</li>
<?php
wp_list_pages('title_li=&depth=0&child_of=".$page->ID."');
?>
</ul>
<?php
}
?>
Я также хотел бы, чтобы у каждой родительской страницы был свой класс, и не включать фактическую ссылку на страницу, а дочерние страницы должны быть подкатегориями вышеуказанного класса, чтобы я мог создать выпадающее меню для всех родительских страниц пользователя и дочерних страниц.
Спасибо!
Для всех, кто ищет такое же решение, я нашел его (кроме добавления другого класса для родителей и детей, к сожалению, это помещает родителя в то же самое пространство, что и его дети, но с помощью CSS и запроса я смогу различать их).
Вот код;
<?php
global $authordata, $post;
$authors_posts = get_posts( array(
'author' => $authordata->ID,
'post_parent' => 0,
'orderby' => 'menu_order',
'post_type' => 'page',
'posts_per_page' => 5 ) );
foreach ($authors_posts as $post) {
?>
<ul> poo
<li>
<?php
echo '<a href="' . get_permalink( $post->ID ) . '">' . $post- >post_title . '</a>';
?>
</li>
<?php
wp_list_pages('title_li=&depth=0&child_of=".$post->ID."');
?>
</ul>
<?php
}
?>
Ответ или решение
Конечно! Давайте рассмотрим, как можно модифицировать ваш код, чтобы он отображал все родительские страницы и их дочерние страницы, принадлежащие тому же автору, что и текущая просматриваемая страница.
Вот улучшенная версия вашего кода, учитывающая все указанные вами требования:
<?php
global $authordata, $post;
// Получаем ID текущего автора
$current_author_id = $authordata->ID;
// Получаем родительские страницы текущего автора
$authors_posts = get_posts(array(
'author' => $current_author_id,
'post_parent' => 0,
'orderby' => 'menu_order',
'post_type' => 'page',
'posts_per_page' => -1 // Получаем все родительские страницы
));
// Добавляем текущую страницу в массив
$authors_posts[] = $post;
foreach ($authors_posts as $post) {
setup_postdata($post); // Подготовка данных поста
?>
<ul class="parent-page">
<li class="parent-item">
<?php
echo '<span>' . esc_html($post->post_title) . '</span>'; // Отображаем название родительской страницы без ссылки
?>
<ul class="children">
<?php
// Получаем дочерние страницы для текущей родительской страницы
$child_args = array(
'post_parent' => $post->ID,
'post_type' => 'page',
'orderby' => 'menu_order',
'order' => 'ASC',
);
$children = get_posts($child_args);
// Если дочерние страницы существуют, выводим их
if ($children) {
foreach ($children as $child) {
?>
<li class="child-item">
<?php
echo '<span>' . esc_html($child->post_title) . '</span>'; // Отображаем название дочерней страницы без ссылки
?>
</li>
<?php
}
}
?>
</ul>
</li>
</ul>
<?php
}
wp_reset_postdata(); // Сбрасываем данные поста после цикла
?>
Пояснения к коду:
-
Получение ID текущего автора: Мы берем ID автора текущей страницы, чтобы использовать его для фильтрации страниц по автору.
-
Получение родительских страниц: Мы используем
get_posts()
для получения всех родительских страниц, принадлежащих текущему автору. -
Добавление текущей страницы: Мы добавляем текущую страницу в массив родительских страниц, чтобы она также отображалась в списке.
-
Вывод родительских и дочерних страниц: Для каждой родительской страницы создается список, и для каждой родительской страницы выводится её название без ссылки. Дочерние страницы выводятся в вложенном списке, также без ссылок.
-
Классы для стилей: Я добавил классы
parent-page
,parent-item
иchild-item
, чтобы вы могли легко стилизовать элементы с помощью CSS.
Этот код должен решить вашу задачу и отобразить все родительские и дочерние страницы от текущего автора, включая текущую страницу.