Форма расширенного поиска с фильтрами для пользовательских таксономий и пользовательских полей


30

Я хотел бы создать форму расширенного поиска для определенного настраиваемого типа записей, с фильтрами для настраиваемых полей настраиваемых типов записей, настраиваемых таксономий и для отдельных свойств настраиваемых типов записей (полей и таксономий), которые будут ссылками на первый Тип публикации с использованием настраиваемого поля отношения.

Недавно я начал с пользовательских типов записей WP, полей и таксономий, мне это до сих пор нравится, но, чтобы извлечь максимальную выгоду из этого, я бы хотел иметь возможность искать его правильно. Нужно ли делать это вручную? Если так, то как?

PS. Если это имеет значение, я использую плагины: Advanced Custom Fields и Custom Post Type UI .

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

настраиваемая форма поиска wordpress, отфильтрованная по настраиваемым полям и пользовательским таксономия


Если у кого-то возникают трудности с реализацией решения Брэди, описанного выше (как я это сделал), вот подсказка: похоже, у Wordpress есть некоторые проблемы с передачей данных сеанса, поэтому вам, вероятно, придется сделать что-то дополнительное, чтобы заставить его работать должным образом. Вопросы обсуждаются здесь: frank-verhoeven.com/using-session-in-wordpress Для меня установка плагина Питера Вустера «Simple Session Support» сделала свое дело. В разделе комментариев поста есть ссылка на плагин.
— SteveR

Ответы:


16

Я думаю, что-то вроде этого тебе лучше всего написать самому.

Взгляните на: http://www.catalysthomes.co.uk/homes-for-sale/

Свойства загружаются в CPT, и у меня есть собственный поиск в боковой панели. Из этого поиска он ищет ряд вещей, таких как таксономии, настраиваемые поля и упорядочение по дате и т. Д.

Так как мне этого добиться? Я отправляю форму в шаблон страницы и оттуда имею дело с данными публикации и создаю новый запрос WP_query на основе критериев поиска. Я использую сеансы для хранения переменных поиска, чтобы я мог разбивать на страницы результаты.

WP_Query очень мощный. Посмотрите: http://codex.wordpress.org/Class_Reference/WP_Query

Там вы можете использовать meta_queryдля запроса нескольких пользовательских полей и использовать tax_queryдля запроса ваших таксономий, плюс еще многое другое. Ниже показано, как мой построен, чтобы дать вам идею.

Файл шаблона:

  <?php
  $temp = $wp_query;
  $wp_query = NULL;
  $args = array();
  ?>

  <?php include("functions/Homes-for-sale/propertyrawresults.php"); ?>
  <?php include("functions/Homes-for-sale/propertysearchresults.php"); ?>

  <?php
  $args['post_type'] = "homes-for-sale";
  $args['showposts'] = 10;
  $args['paged'] = $paged;
  $wp_query = new WP_Query($args);
  ?>

  <?php include("functions/Homes-for-sale/propertylistlayout.php"); ?>

Сырые результаты

<?php
if($_POST['sortby']) {
    $_SESSION['prop_selectedsortby'] = $_POST['sortby'];
}

switch($_SESSION['prop_selectedsortby']) {
    case "name-asc": $args['order'] = "ASC"; $args['orderby'] = "title"; break;
    case "name-desc": $args['orderby'] = "title"; break;
    case "price-asc": $args['order'] = "ASC"; $args['orderby'] = "meta_value_num"; $args['meta_key'] = "chb_homes_for_sale_specifics_fmv"; break;
    case "price-desc": $args['orderby'] = "meta_value_num"; $args['meta_key'] = "chb_homes_for_sale_specifics_fmv"; break;
    case "date-asc": $args['order'] = "ASC"; break;
    default: /* No need to set arguments here as wp query defaults */ break;
}

$selectedsortby[$_SESSION['prop_selectedsortby']] = " selected=\"selected\"";
?>

результаты поиска

<?php
if( ! empty( $_SESSION['s_property_ptype'] ) ) {
    $args['meta_query'][] = array(
        'key' => 'chb_homes_for_sale_types_nbrs',
        'value' => $_SESSION['s_property_ptype']
    );
}

if( ! empty( $_SESSION['s_property_development'] ) ) {
    $args['meta_query'][] = array(
        'key' => 'chb_homes_for_sale_ofdevelopment',
        'value' => $_SESSION['s_property_development']
    );
}

if( isset( $_SESSION['s_property_area'] ) && 0 != $_SESSION['s_property_area'] ) {
    $args['tax_query'][] = array(
        'taxonomy' => 'areas',
        'field' => 'id',
        'terms' => array( (int) $_SESSION['s_property_area'] ),
    );
}

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bedrooms',
    'value' => $_SESSION['s_property_bedrooms_min'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bedrooms',
    'value' => $_SESSION['s_property_bedrooms_max'],
    'compare' => '<=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bathrooms',
    'value' => $_SESSION['s_property_bathrooms_min'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bathrooms',
    'value' => $_SESSION['s_property_bathrooms_max'],
    'compare' => '<=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_fmv',
    'value' => $_SESSION['s_property_min_price'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_fmv',
    'value' => $_SESSION['s_property_max_price'],
    'compare' => '<=',
    'type' => 'SIGNED'
);
?>

Макет списка Просто стандартный цикл WP, чтобы показать выдержки из поста и информацию.


Привет, Брейди, спасибо за этот пример. Могу ли я попросить вас, если возможно, поделиться формой? На каком URL вы его отправляете?
— Салоцин

@salocin - Эту информацию можно получить, посмотрев на источник страницы по указанному URL-адресу в ответ
— Брейди,

спасибо Брэди, так URL шаблона страницы?
— salocin

Форма находится на Catalhome.co.uk. Вы можете просмотреть исходный код и посмотреть, как работает форма
— Брэди,

Вы проверяете, есть ли в пользовательских таксономиях сообщения с ними в качестве настраиваемого поля? Как именно вы заполняете форму поиска? @Brady спасибо
— Фил Хадсон

2

Попробуйте плагин Taxonomy Picker вместе с Relevanssi. Убийственная комбинация.

http://www.squidoo.com/taxonomy-picker-wordpress-plugin http://wordpress.org/extend/plugins/relevanssi/


это не принимает во внимание почтовые отношения, что является трудной частью моей проблемы. Проще фильтровать посты по таксономии, мне нужно отфильтровать их, чтобы купить таксономию (или пользовательское поле) соответствующего поста.
— Pax

0

Взгляните на плагин Relevanssi, он может сделать то, что вы ищете: http://wordpress.org/extend/plugins/relevanssi/


Он не подходит подходу, который мне нужен (с определенными фильтрами), но это очень интересный плагин, он выглядит как отличная замена функции поиска по умолчанию, большое спасибо за указание на это.
— чел

0

Если у кого-то возникают проблемы с реализацией решения Брэди, описанного выше (как я это сделал), вот подсказка: похоже, у WordPress есть некоторые проблемы с передачей данных сеанса, поэтому вам, вероятно, придется сделать что-то дополнительное, чтобы заставить его работать должным образом. Вопросы обсуждаются здесь

В functions.php:

function init_sessions() {
  if (!session_id()) {
  session_start();
 }
}
add_action('init', 'init_sessions');

В вашем шаблоне:

/**
* Enable sessions
*/
if (!session_id())
session_start();

Для меня установка плагина Питера Вустера " Simple Session Support " сделала свое дело.


1
Привет Стив Спасибо за размещение вашего первого ответа здесь. Рад, что вы в WPSE. Для дальнейшего использования ответы не должны полностью поворачиваться на внешней ссылке. Если ссылка отключена, ваш ответ становится доброкачественным. Не могли бы вы обновить свой ответ парой примеров соответствующих фрагментов кода?
— Брайан Фегтер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.