Создание пользовательских шаблонов для списка записей в дочерней теме Twenty Seventeen

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

Я использую дочернюю тему на основе ‘Twenty Seventeen’ и создал собственный тип записи (‘review’).

Я хочу создать две страницы: одну, которая перечисляет ‘reviews’, и другую, которая перечисляет смесь ‘posts’ и ‘reviews’ (в порядке недавности).

Для первой страницы я сделал копию index.php из Twenty Seventeen и назвал ее page-reviews.php, добавив такой код в начало:

$args = array(
    'post_type' => 'review',
    'orderby' => 'date',
    'order' => 'DESC',
    'posts_per_page' => 10,
);
$the_query = new WP_Query( $args );

Далее заменил have_posts() и the_post() на $the_query->have_posts() и $the_query->the_post() соответственно.

Если я выбираю использовать этот шаблон для страницы, он работает, и ‘reviews’ перечислены, но весь макет перепутан. В <body> много классов, которые нарушают макет.

Например, стандартная главная страница блога с использованием index.php имеет эти классы в <body> и выглядит нормально:

blog logged-in admin-bar hfeed has-header-image has-sidebar colors-light customize-support

В то время как моя пользовательская страница имеет такие классы:

page-template page-template-page-postslist page-template-page-postslist-php page page-id-15071 logged-in admin-bar has-header-image page-two-column colors-light customize-support

Как я могу сделать пользовательский шаблон, который больше похож на index.php с точки зрения классов, которые он добавляет?

Вы можете использовать фильтр классов тела, чтобы отрегулировать классы, добавляемые в тег body.

add_filter('body_class','review_pages_classes');
function review_pages_classes($classes) {
    $classes[] = 'blog';
    return $classes;
}

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

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

add_shortcode('review-list', 'show_review_list');

function show_review_list($attr){
    $args = array(
        'post_type' => 'review',
        'orderby' => 'date',
        'order' => 'DESC',
        'posts_per_page' => 10,
    );
    $the_query = new WP_Query( $args );

    ob_start();

    //...
    //Поместите код из index.php здесь, чтобы получить правильную структуру HTML
    //так же, как вы сделали это раньше
    //

    return ob_get_clean();
}

Для использования вставьте [review-list] в любое место на странице/посте.

Ответ или решение

Создание настраиваемых шаблонов списка постов в дочерней теме Twenty Seventeen может быть сложной задачей, особенно если вы хотите добиться определенного визуального стиля и функциональности. Рассмотрим каждый аспект этого вопроса, чтобы разработать решение, которое будет соответствовать вашим специфическим требованиям.

Теория

Создание кастомных шаблонов в дочерней теме WordPress — это отличная возможность расширить функциональность сайта и адаптировать его под свои нужды. Однако, важным аспектом является понимание того, как работает система шаблонов WordPress и, в частности, как реализованы наследование и стилизация в Twenty Seventeen. Ваша задача состоит в том, чтобы создать страницу, которая будет отображать записи кастомного типа ‘review’, а также комбинированный список, содержащий как стандартные записи блога, так и записи типа ‘review’. При этом вы хотите добиться определенного вида и функциональности, не нарушая стандартный внешний вид сайта.

В вашем примере вы создали файл page-reviews.php как копию index.php и изменили код для запроса записей нужного типа. Это стандартный подход, когда речь идет о кастомизации вывода определенного типа контента. Однако проблема, с которой вы столкнулись, связана с CSS-классами, которые добавляются в body и определяют стилизацию страницы.

Пример

Рассмотрим, как вы можете использовать фильтр body_class для изменения классов, добавляемых в тег body. Этот фильтр позволяет манипулировать классами, которые WordPress автоматически добавляет в зависимости от типа шаблона, который используется. Используя функцию add_filter, вы можете добавить или удалить нужные классы для вашей кастомной страницы.

add_filter('body_class', 'review_pages_classes');
function review_pages_classes($classes) {
    if (is_page('reviews')) {
        $classes[] = 'blog';
    }
    return $classes;
}

Данный код добавляет класс ‘blog’ на страницу с названием ‘reviews’. Это позволяет сделать стили этой страницы ближе к стилям, используемым для страниц блога, что частично решает вашу проблему со стилями.

Применение

  1. Создание новой страницы-шаблона: копирование index.php для создания нового шаблона (page-reviews.php) — правильный шаг. Убедитесь, что в начале файла находится заголовок шаблона, например:

    <?php
    /*
    Template Name: Reviews Page
    */
  2. Коррекция классов и стилизации: настройка классов body. Выше был приведен пример, как добавлять класс ‘blog’ через фильтр body_class, что может помочь вашей странице унаследовать стили от страниц блога.

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

    Поместите следующий код в functions.php:

    add_shortcode('review-list', 'show_review_list');
    
    function show_review_list($attr) {
        $args = array(
            'post_type' => 'review',
            'orderby' => 'date',
            'order' => 'DESC',
            'posts_per_page' => 10,
        );
        $the_query = new WP_Query($args);
    
        ob_start();
    
        if ($the_query->have_posts()) {
            while ($the_query->have_posts()) {
                $the_query->the_post();
                // Здесь вы вставляете HTML из index.php
                // Например:
                // echo '<div>' . get_the_title() . '</div>';
            }
        } else {
            echo 'No reviews found';
        }
        wp_reset_postdata();
    
        return ob_get_clean();
    }

    Теперь, используя шорткод [review-list], вы можете добавлять список обзоров в любой части вашего сайта.

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

Заключение

Создание кастомных шаблонов в WordPress — это не только возможность для кастомизации контента, но и задача, требующая внимательного отношения к деталям, включая стилизацию и функциональность. Используя фильтры WordPress, такие как body_class, и расширяясь через шорткоды, вы можете получить значительное преимущество в управлении своим контентом. В итоге, адаптируя ваш сайт под специфичные нужды, вы можете существенно улучшить пользовательский опыт и внешний вид сайта.

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

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