Вопрос или проблема
У меня есть настраиваемый тип записи и страница, на которой я перебираю их в цикле. Я пытаюсь внедрить плагин “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
, чтобы корректно обрабатывать запросы поиска и фильтрации для конкретного типа записей:
Шаги по реализации:
-
Настройте форму поиска: Ваша форма должна экспортировать результаты для типа записей
meetup_groups
. Внутри формы используйте скрытое поле для принудительного использования этого типа записей. -
Измените
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(); ?>
-
Создайте
meetup-groups.php
: Этот файл будет содержать логику отображения записей типаmeetup_groups
. -
Оптимизация: Убедитесь, что все компоненты правильный и надлежащим образом оптимизированы для производительности и безопасности.
Таким образом, интеграция поиска и фильтрации в ваш проект WordPress расширяет возможности взаимодействия пользователей с вашим контентом, позволяя быстро находить нужные записи. Надеюсь, это руководство поможет вам эффективно использовать WP_Query и удобные формы фильтрации для достижения желаемого результата.