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

Вопрос или проблема

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

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

Мне также нужно убедиться, что отображается и просматриваемая страница.

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

<?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(); // Сбрасываем данные поста после цикла
?>

Пояснения к коду:

  1. Получение ID текущего автора: Мы берем ID автора текущей страницы, чтобы использовать его для фильтрации страниц по автору.

  2. Получение родительских страниц: Мы используем get_posts() для получения всех родительских страниц, принадлежащих текущему автору.

  3. Добавление текущей страницы: Мы добавляем текущую страницу в массив родительских страниц, чтобы она также отображалась в списке.

  4. Вывод родительских и дочерних страниц: Для каждой родительской страницы создается список, и для каждой родительской страницы выводится её название без ссылки. Дочерние страницы выводятся в вложенном списке, также без ссылок.

  5. Классы для стилей: Я добавил классы parent-page, parent-item и child-item, чтобы вы могли легко стилизовать элементы с помощью CSS.

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

Оцените материал
Добавить комментарий

Капча загружается...