Как создать пользовательский шаблон поиска для пользовательской таксономии?

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

Я создал пользовательский тип записи “грузовик” с помощью плагина для пользовательских типов записей. Затем я создал несколько пользовательских налогономий “марка” и “модель”. Я использую Advanced Custom Fields в шаблонах для отображения вывода так, как мне нужно. У меня все выглядит и работает так, как я и хотел… почти.

Я использую плагин search & filter, чтобы разрешить фильтрацию по пользовательским налогономиям. Так что я застрял, когда пытаюсь отфильтровать результаты; каждая налогономия направлена на архивную страницу, которую я создал, но она каждый раз отображает все результаты. Я думаю, что как-то испортил свой запрос, но не уверен. Мой код приведен ниже, буду признателен за помощь, спасибо.

Это архивная страница для отображения всех списков.

    <?php /* Шаблон Имя: TruckArchive */ ?>

<?php get_header(); ?>

<div id="container" class="truck-archive">
<div class="title-container">
    <h1 class="truck-title"><?php the_title(); ?></h1>
</div>
    <div class="row">
        <div class="col-md-9">
            <div id="content" role="main">

                <?php if ( have_posts() ) : the_post; ?>
                    <?php while ( have_posts() ) : the_post(); ?>

                    <?php endwhile; ?>

                    <?php endif; wp_reset_postdata(); ?>

                    <!-- новый запрос ----- -->

                    <?php 
                    // Пример добавления WP PageNavi в новый вызов WP_Query
                    $paged = get_query_var('paged') ? get_query_var('paged') : 1;
                    $args = array('post_type' => 'truck', 'posts_per_page' => 10, 'paged' => $paged);
                    $mytrucks = new WP_Query( $args );
                    while ( $mytrucks->have_posts() ) : $mytrucks->the_post(); ?>
                       <div class="col-md-12 panel panel-default">
                    <div class="col-md-4 thumb title">
                        <?php if ( has_post_thumbnail()) : ?>
                           <a href="https://wordpress.stackexchange.com/questions/244836/<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" >
                           <?php the_post_thumbnail('thumbnail'); ?>
                           </a>
                         <?php endif; ?>
                    </div>
                    <div class="col-md-4">
                    <h5><?php the_title(); ?></h5>
                        <?php echo custom_field_excerpt(); ?>
                        <ul>
                            <li><b>Запасной номер:</b> <?php the_field('stock_number'); ?></li>
                            <li><b>Производитель двигателя:</b> <?php the_field('engine_manufacturer'); ?></li>
                            <li><b>Тип двигателя:</b> <?php the_field('engine_type'); ?></li>
                            <li><b>Лошадиные силы:</b> <?php the_field('horsepower'); ?></li>
                            <li><b>Трансмиссия:</b> <?php the_field('transmission'); ?></li>
                        </ul>   
                    </div>
                    <div class="col-md-4">
                    <h4>Цена: $<?php the_field('price'); ?></h4>
                        <div contact-info-archive>
                            <span>Заголовок</span><br>
                            <address>Адрес</address>
                            <span>Телефон: Номер телефона</span><br><br>
                            <a href="https://wordpress.stackexchange.com/questions/244836/<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" class="btn btn-default">Узнать больше</a>
                        </div>          
                    </div>
                </div>
                <?php endwhile; ?>
                <div class="row">
                    <div class="col-md-12 text-left">
                        <?php wp_pagenavi( array( 'query' => $mytrucks ) ); ?>
                    </div>
                </div>

                <!-- конец нового запроса -->
            </div><!-- #content -->
        </div>
        <div class="col-md-3 search-filter">
            <div class="panel panel-default">
            <h4>Уточните поиск</h4>
                <?php echo do_shortcode( '[searchandfilter taxonomies="model,make"]' ); ?>
            </div>

        </div>
    </div>
</div><!-- #container -->

<?php get_footer(); ?>

Это страница пользовательской налогономии “taxonomy-model.php”

<?php
include('archive-truck.php');
 ?>

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

    <?php get_header(); ?>

<div id="container" class="truck-archive">
<div class="title-container">
    <h1 class="truck-title">Результаты поиска</h1>
</div>
    <div class="row">
        <div class="col-md-9">
            <div id="content" role="main">

                    <?php $mytrucks = new WP_Query(array(
                            'post_type' => 'truck'
                    )); ?>
                <?php while ($mytrucks->have_posts()) : $mytrucks->the_post();  ?>
                <div class="col-md-12 panel panel-default">
                    <div class="col-md-4 thumb title">
                        <?php if ( has_post_thumbnail()) : ?>
                           <a href="https://wordpress.stackexchange.com/questions/244836/<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" >
                           <?php the_post_thumbnail('thumbnail'); ?>
                           </a>
                         <?php endif; ?>
                    </div>
                    <div class="col-md-4">
                    <h5><?php the_title(); ?></h5>
                        <?php echo custom_field_excerpt(); ?>
                        <ul>
                            <li><b>Запасной номер:</b> <?php the_field('stock_number'); ?></li>
                            <li><b>Производитель двигателя:</b> <?php the_field('engine_manufacturer'); ?></li>
                            <li><b>Тип двигателя:</b> <?php the_field('engine_type'); ?></li>
                            <li><b>Лошадиные силы:</b> <?php the_field('horsepower'); ?></li>
                            <li><b>Трансмиссия:</b> <?php the_field('transmission'); ?></li>
                        </ul>   
                    </div>
                    <div class="col-md-4">
                    <h4>Цена: $<?php the_field('price'); ?></h4>
                        <div contact-info-archive>
                            <span>Заголовок</span><br>
                            <address>Адрес</address>
                            <span>Телефон: Номер телефона</span><br>
                            <a href="https://wordpress.stackexchange.com/questions/244836/<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" class="btn btn-default">Узнать больше</a>
                        </div>          
                    </div>
                </div>
                <?php endwhile; ?>
            </div><!-- #content -->
        </div>
        <div class="col-md-3 search-filter">
            <div class="panel panel-default">
                <?php echo do_shortcode( '[searchandfilter taxonomies="model,make"]' ); ?>
            </div>

        </div>
    </div>

</div><!-- #container -->

<?php get_footer(); ?>

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

$current_cat = get_query_var('model');
                  $args = array(
                    'post_type' => 'truck',
                    'model' => $current_cat
                  );
                 query_posts($args);

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

Для создания пользовательского шаблона поиска с учетом пользовательских таксономий в WordPress вам потребуются несколько шагов. Вы уже сделали большой объем работы, но давайте по порядку разберем, как правильно настроить отображение результатов поиска для вашего пользовательского типа записи «truck» с учетом таксономий «make» и «model».

Шаг 1: Настройка шаблона архивов

У вас уже есть шаблон archive-truck.php, который вы используете для отображения архивов. Убедитесь, что в этом файле правильно происходит запрос к базе данных. Рекомендуется изменить подход к запросу постов, чтобы учитывать фильтры по вашим таксономиям.

// Получаем текущие значения для фильтров
$model = get_query_var('model');
$make = get_query_var('make');

// Аргументы для нового запроса
$args = array(
    'post_type' => 'truck',
    'posts_per_page' => 10,
    'paged' => get_query_var('paged', 1),
);

// Проверка наличия значений для таксономий и добавление их в аргументы
if ($model) {
    $args['tax_query'][] = array(
        'taxonomy' => 'model',
        'field'    => 'slug',
        'terms'    => $model,
    );
}

if ($make) {
    $args['tax_query'][] = array(
        'taxonomy' => 'make',
        'field'    => 'slug',
        'terms'    => $make,
    );
}

// Выполняем новый запрос
$mytrucks = new WP_Query($args);

Шаг 2: Шаблон для поиска

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

<?php get_header(); ?>

<div id="container" class="truck-archive">
    <div class="title-container">
        <h1 class="truck-title">Результаты поиска</h1>
    </div>
    <div class="row">
        <div class="col-md-9">
            <div id="content" role="main">

                <?php
                // Получаем текущие параметры запроса
                $model = get_query_var('model');
                $make = get_query_var('make');

                // Аргументы для нового запроса
                $args = array(
                    'post_type' => 'truck',
                    'posts_per_page' => 10,
                    'paged' => get_query_var('paged', 1),
                );

                if ($model) {
                    $args['tax_query'][] = array(
                        'taxonomy' => 'model',
                        'field'    => 'slug',
                        'terms'    => $model,
                    );
                }

                if ($make) {
                    $args['tax_query'][] = array(
                        'taxonomy' => 'make',
                        'field'    => 'slug',
                        'terms'    => $make,
                    );
                }

                // Выполняем новый запрос
                $mytrucks = new WP_Query($args);

                if ($mytrucks->have_posts()) :
                    while ($mytrucks->have_posts()) : $mytrucks->the_post();
                        // Ваш код для отображения постов
                    endwhile;

                    // Навигация по страницам
                    wp_pagenavi(array('query' => $mytrucks));
                else :
                    echo '<p>К сожалению, ничего не найдено.</p>';
                endif;

                wp_reset_postdata();
                ?>

            </div><!-- #content -->
        </div>
        <div class="col-md-3 search-filter">
            <div class="panel panel-default">
                <h4>Сузьте поиск</h4>
                <?php echo do_shortcode('[searchandfilter taxonomies="model,make"]'); ?>
            </div>
        </div>
    </div>
</div><!-- #container -->

<?php get_footer(); ?>

Шаг 3: Обработка параметров запроса

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

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

Заключение

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

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

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