Как создать мульти-таксономический, многозначный запрос на основе пользовательского ввода


Благодаря превосходному сообщению Отто о расширенных запросах таксономии, я (в основном) понимаю, как создавать мульти-таксономические и многозначные запросы. Однако чего я не знаю, так это как создавать их динамически на основе пользовательского ввода. Я бы очень хотел закончить чем-то вроде Amazon.com имеет на своем сайте флажки рядом с различными терминами для таксономии на боковой панели (и несколько списков терминов, каждый с заголовком таксономии). Что-то вроде это:

Taxonomy with list of terms and check boxes to select those terms

Как мне построить что-то подобное? Динамическое отображение содержимого (содержимое изменяется, когда установлен флажок) было бы здорово, но я бы, конечно, согласился на наличие кнопки "отправить".

Author: Community, 2011-05-11

2 answers

Я немного нечетко разбираюсь в специфике технической стороны, но я думаю, что общий план будет следующим:

  1. Интерфейс - вам нужно будет либо отправить это в виде формы с помощью кнопки, либо JavaScript.

  2. Переменные запроса - вам нужно будет зарегистрировать пользовательские переменные с помощью фильтра query_vars, чтобы ваши пользовательские данные не были удалены из URL.

  3. Запрос - изменение запроса для создания сложного запроса с использованием пользовательских данных представленный.
 2
Author: Rarst, 2011-05-11 21:53:37

Отправляйте форму с помощью javascript при изменении статуса поля. Затем вы можете использовать wp_query для создания нового запроса и использовать tax_query для отображения проверенных таксономий:

$args = array(
    ... // posttype and such
    'tax_query' => array(),
    ...// other arguments 
);
//if post is set
if(isset($_POST['cats'])){
    //pusch to array
    $args['tax_query'][] = array(
        'taxonomy' => 'the taxonomy',
        'field' => 'id', // get tax by id or slug
        'terms' => $_POST['cats'],
        'operator' => 'AND' // or you can choose 'IN'
    );
}
$new_query = new Wp_Query($args);
//start loop
while ($new_query->have_posts() ) : $new_query->the_post(); ?>

Надеюсь, это поможет.

 1
Author: ferenyl, 2011-12-12 02:38:54