Как отображать сообщения с помощью пользовательских терминов таксономии с помощью флажков?


Я хотел бы иметь форму с флажками. Каждый флажок будет термином моей таксономии "города". Идея заключается в том, что если пользователь установит любой из флажков, он должен отображать все сообщения, которые НЕ в отмеченных терминах.

Если бы у меня был этот код:

$args['tax_query'] = array(
    array(
        'taxonomy' => 'cities',
        'terms' => array('Boston', 'Chicago'),
        'field' => 'slug',
        'operator' => 'NOT IN',
    ),
);
query_posts($args);

Как я могу передать в массив терминов значение флажков? Я имею в виду, чтобы изменить:

'terms' => array('Boston', 'Chicago'),

Кому:

'terms' => array(VALUE CHECKBOX 1, VALUE CHECKBOX 2),

Спасибо.

Author: Mike, 2013-04-26

1 answers

Вы можете выполнить запрос с параметром tax_query, который исключает определенные термины таксономии. Смотрите этот ответ .

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

В качестве альтернативы вы можете запустить свой запрос на сервере сторону и вызовите его через AJAX. Для получения дополнительной информации об этом вы можете начать здесь (здесь говорится о плагинах, но вам на самом деле не нужно создавать плагин, вы всегда можете поместить свой PHP-код в functions.php внутри каталога тем) или просто поищите учебники по реализации AJAX в WordPress.

РЕДАКТИРОВАТЬ: согласно вашему комментарию, вот код для получения значения из флажка на странице. Он непроверенный, предназначен только для руководства. Обратите внимание, что форма подчиняется сама себе, мы достигаем этого с помощью ввод URL-адреса страницы в параметр action формы.

<?php
$cb_city = '';
if(isset($_POST['city']) && $_POST['city'] != '') { // if form was submitted we can get value
    $cb_city = $_POST['city'];
}
?>
<form action="<?php echo get_permalink(); ?>" method="POST">
    <label>Your label
        <?php
            $checked = "";
            if( !empty($cb_city) ){ // pre-populate checkboxif it was checked on form submit
                $checked = "checked";
            }
        ?>
        <input <?= $checked; ?> type="checkbox" name="city" id="city" value="1"/>
    </label>
    <button type="submit" class="btn-submit">Submit</button>
</form>
 0
Author: montrealist, 2017-04-13 12:37:54