Как отображать сообщения с помощью пользовательских терминов таксономии с помощью флажков?
Я хотел бы иметь форму с флажками. Каждый флажок будет термином моей таксономии "города". Идея заключается в том, что если пользователь установит любой из флажков, он должен отображать все сообщения, которые НЕ в отмеченных терминах.
Если бы у меня был этот код:
$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),
Спасибо.
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>