Добавьте функциональность поиска и фильтрации в пользовательский цикл.

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

У меня есть настраиваемый тип записи и страница, на которой я перебираю их в цикле. Я пытаюсь внедрить плагин “Search and Filter” на эту страницу, чтобы пользователи могли фильтровать настраиваемые записи.

Однако в данный момент это не работает… Просто возвращается к обычному поиску WordPress.

Есть идеи, как мне это внедрить в мой цикл?

Вот мой цикл:

<div class="meetup-groups">

<?php
$loop = new WP_Query( array(
    'post_type' => 'meetup_groups',
    'posts_per_page' => -1
)
);
?>

<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>

<!-- выполняем действия -->
<a href="https://wordpress.stackexchange.com/questions/351654/<?php echo esc_url( get_field("meetup_group_link') ); ?>">
    <div class="meetup-card">
    <div class="meetup-overlay"></div>
    <img src="<?php the_post_thumbnail('medium'); ?>">
    <div class="meetup-card-text"><h3><?php the_title(); ?></h3>
    <div class="meetup-location"><h4><?php the_field('city'); ?><br><?php the_field('country'); ?></h4></div></div>
</div></a>

<?php endwhile; wp_reset_query(); ?>

</div>

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

Вы можете добавить это в вашу форму поиска

<input type="hidden" name="post_type" value="meetup_groups">

Пример:

<form method="get" id="my-custom-searchform" action="<?php echo esc_url(home_url( "https://wordpress.stackexchange.com/" )); ?>">
    <input type="text" value="<?php the_search_query(); ?>" name="s" id="s" placeholder="<?php echo esc_attr__( 'Search ...', 'text-domain' ); ?>" />
    <button type="submit"><?php echo esc_html__('Search','text-domain'); ?></button>
<input type ="hidden" name="post_type" value="meetup_groups">
</form>

Также вам нужно изменить файл search.php
Чтобы отображать по вашему усмотрению.

Вы должны создать файл, который содержит что-то подобное для отображения поиска по типу записи.

Например, я создаю файл meetup-groups.php с следующим кодом.


<div class="meetup-groups">

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

<!-- выполняем действия -->
<a href="https://wordpress.stackexchange.com/questions/351654/<?php echo esc_url( get_field("meetup_group_link') ); ?>">
    <div class="meetup-card">
    <div class="meetup-overlay"></div>
    <img src="<?php the_post_thumbnail('medium'); ?>">
    <div class="meetup-card-text"><h3><?php the_title(); ?></h3>
    <div class="meetup-location"><h4><?php the_field('city'); ?><br><?php the_field('country'); ?></h4></div></div>
</div></a>

<?php endwhile; 
endif; ?>

</div>

Затем вызовите файл в PHP файле search.php

например, файл search.php

<?php get_header(); ?>
<?php
if (is_post_type_archive('meetup_groups') || is_tax('meetup_groups-category') || is_tax('meetup_groups-tags')){
get_template_part('meetup-groups.php');

} else {

// Добавьте стандартный цикл WordPress 

}
?>
<?php get_footer(); ?>

Этот код зависит от того, как вы создаете настраиваемую таксономию

if (is_post_type_archive('meetup_groups') || is_tax('meetup_groups-category') || is_tax('meetup_groups-tags')){

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

Для добавления функции поиска и фильтрации к циклу на WordPress, важно учитывать несколько ключевых аспектов. Подойдем к этому вопросу с использованием метода TEA: теория, пример, применение.

Теория

В WordPress для работы с пользовательскими типами записей и их фильтрации может быть использован стандартный механизм WP_Query. Это позволяет нам создавать запросы для извлечения контента на основе разнообразных параметров, включая типы записей, таксономии и метаполя. Когда дело доходит до реализации поиска и фильтрации для пользовательского типа записей, как "meetup_groups", важно эффективно объединить WP_Query с функционалом поиска и фильтрации. Это обеспечит гибкость и точность отображения искомых записей.

Пример

В представленном варианте кода используется WP_Query для извлечения всех записей типа "meetup_groups". Внедрение поиска и фильтрации начинается с создания пользовательской формы поиска, специфичной для нужного типа записей. Пример такой формы:

<form method="get" id="my-custom-searchform" action="<?php echo esc_url(home_url('/')); ?>">
    <input type="text" value="<?php the_search_query(); ?>" name="s" id="s" placeholder="<?php echo esc_attr__('Search ...', 'text-domain'); ?>" />
    <input type="hidden" name="post_type" value="meetup_groups">
    <button type="submit"><?php echo esc_html__('Search','text-domain'); ?></button>
</form>

Здесь скрытое поле post_type задает тип записей, которые мы ищем ("meetup_groups").

Применение

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

Шаги по реализации:

  1. Настройте форму поиска: Ваша форма должна экспортировать результаты для типа записей meetup_groups. Внутри формы используйте скрытое поле для принудительного использования этого типа записей.

  2. Измените search.php: Добавьте в этот файл обработчик, который проверяет, является ли текущая страница архивом для meetup_groups и загружает специальный шаблон. Пример:

    <?php get_header(); ?>
    
    <?php
    if (isset($_GET['post_type']) && $_GET['post_type'] == 'meetup_groups') {
        get_template_part('meetup-groups');
    } else {
        // Стандартная петля WordPress
        if (have_posts()) : while (have_posts()) : the_post();
            // Отображение стандартных записей
        endwhile; endif;
    }
    ?>
    
    <?php get_footer(); ?>
  3. Создайте meetup-groups.php: Этот файл будет содержать логику отображения записей типа meetup_groups.

  4. Оптимизация: Убедитесь, что все компоненты правильный и надлежащим образом оптимизированы для производительности и безопасности.

Таким образом, интеграция поиска и фильтрации в ваш проект WordPress расширяет возможности взаимодействия пользователей с вашим контентом, позволяя быстро находить нужные записи. Надеюсь, это руководство поможет вам эффективно использовать WP_Query и удобные формы фильтрации для достижения желаемого результата.

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

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