WordPress: расширенный поиск пользовательских типов записей и пользовательских полей
У меня следующая проблема. Я пытаюсь создать сайт по недвижимости с WordPress. Я создал пользовательский тип записи и включил следующие поля в дополнительные настраиваемые поля: Тип объекта (выберите: Продажа, Аренда), Тип недвижимости (выберите: Квартира, Дом), Цена (Количество), Город (тип поля: Выбрать)
У меня есть следующий запрос, чтобы получить значения:
<?php
$args = array(
'post_type' => 'properties',
'posts_per_page' => 10,
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'property_type',
'value' => 'Apartment',
),
),
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
?>
<?php
$property_type = get_field('property_type');
$property_price = get_field('price');
$property_location = get_field('location');
$property_description = get_field('description');
?>
<div class="propert_list">
<h1><?php the_title(); ?></h1>
<div class="property_type">
Location - <strong><?php echo $property_type; ?></strong>
</div>
<div class="property_price">
Price - <strong><?php echo $property_price; ?></strong>
</div>
<div class="property_location">
Location - <strong><?php echo $property_location['address']; ?></strong>
</div>
<div class="property_description">
Property Description - <strong><?php echo $property_description; ?></strong>
</div>
</div>
<br /><hr />
<?php endwhile; ?>
Где и как я могу создать форму поиска, чтобы отфильтровать свойства по типу 'property_type' и 'location'.
3 ответа
Одним из решений является установка Search & Filter. Он позволяет вам фильтровать поиск по типу / типам постов, метаполям и т. Д. И является очень мощным. Недостатком является то, что вам, возможно, придется заплатить за Pro версию.
Другим решением может быть добавление скрытых полей ввода в вашу форму поиска PHP. Например:
<input type="hidden" name="post_type[]" value="properties" />
искать только свойства и делать то же самое для фильтрации ваших мета-значений. Это легко реализовать, но менее гибко, и я все равно предпочитаю разделять свое мнение и логику.
Третьим решением будет использование pre_get_posts
фильтр. Тогда вы могли бы написать, например,
if ( $post_types ) $query->set( 'post_type', 'properties' );
... и так далее, внутри этого фильтра. Есть много примеров, которые показывают вам, как это сделать. Просто поищите в Google имя фильтра:-)
Почему вы не используете плагин для этого?
попробуйте: https://wordpress.org/plugins/ultimate-wp-query-search-filter/
Это было бы идеально..
Если вы хотите выполнить поиск по тому же шаблону страницы, вы можете добиться этого, используя таблицу данных HTML с возможностью поиска и JavaScript. Просто заключите ваши значения в таблицу. Вы можете ссылаться на эти ссылки для примера кода:
http://www.vijayjoshi.org/2011/01/03/searching-text-in-a-html-table-using-jquery/
а также
https://www.datatables.net/examples/data_sources/js_array.html
Я также заметил, что вы забыли сбросить запрос wp. Всегда безопасно закончить wp_reset_query()
;
Надеюсь, вам это поможет.