Как добавить возможность фильтрации записей по географическим меткам на WordPress-сайте?
Здравствуйте! Я создаю WordPress-сайт и мне необходимо добавить возможность фильтрации записей по географическим меткам. Я уже пробовал использовать плагины, но они не дают нужного результата. Пожалуйста, помогите мне разобраться, как реализовать это с помощью кода.
У меня есть пользовательская таксономия "Местоположения" с несколькими терминами, которые я использовал для меток на записях. Я хочу добавить на странице фильтр, который позволит пользователю выбирать местоположение и отображать только записи с выбранным меткой.
Я использую шаблон single.php для отображения отдельных записей и archive.php для отображения списка записей. Вот мой пример кода:
<form method="get" action="">
<label for="location">Выберите местоположение:</label>
<select name="location" id="location">
<option value="">Все местоположения</option>
<option value="term1">Место 1</option>
<option value="term2">Место 2</option>
<option value="term3">Место 3</option>
</select>
<input type="submit" value="Фильтр">
</form>
<?php
$args = array(
'post_type' => 'post',
'posts_per_page' => -1
);
if (isset($_GET['location']) && !empty($_GET['location'])) {
$args['tax_query'] = array(
array(
'taxonomy' => 'location',
'field' => 'slug',
'terms' => $_GET['location']
)
);
}
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Вывод записи
}
} else {
// Сообщение о том, что записей не найдено
}
wp_reset_postdata();
?>
Буду очень благодарен за помощь в решении данной задачи! Спасибо заранее!
Ответы:
function wpse_register_location_taxonomy() {
$labels = array(
'name' => 'Местоположения',
'singular_name' => 'Местоположение',
'search_items' => 'Искать местоположения',
'all_items' => 'Все местоположения',
'edit_item' => 'Редактировать местоположение',
'update_item' => 'Обновить местоположение',
'add_new_item' => 'Добавить новое местоположение',
'new_item_name' => 'Новое местоположение',
'menu_name' => 'Местоположения'
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'location')
);
register_taxonomy('location', 'post', $args);
}
add_action('init', 'wpse_register_location_taxonomy');
После создания таксономии "Местоположения", добавь следующий код в свой шаблон single.php для отображения отдельных записей и в шаблон archive.php для отображения списка записей:
<form method="get" action="">
<label for="location">Выберите местоположение:</label>
<select name="location" id="location">
<option value="">Все местоположения</option>
<option value="term1">Место 1</option>
<option value="term2">Место 2</option>
<option value="term3">Место 3</option>
</select>
<input type="submit" value="Фильтр">
</form>
<?php
$args = array(
'post_type' => 'post',
'posts_per_page' => -1
);
if (isset($_GET['location']) && !empty($_GET['location'])) {
$args['tax_query'] = array(
array(
'taxonomy' => 'location',
'field' => 'slug',
'terms' => $_GET['location']
)
);
}
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Вывод записи
}
} else {
// Сообщение о том, что записей не найдено
}
wp_reset_postdata();
?>
В этом коде мы создали форму, в которой пользователь может выбрать местоположение из выпадающего списка. После отправки формы, мы проверяем, есть ли значение выбранного местоположения в массиве $_GET и не является ли оно пустым. Если значение существует, мы добавляем в аргументы запроса параметр tax_query, который фильтрует записи по выбранному местоположению.
Затем мы создаем новый экземпляр WP_Query с использованием аргументов запроса и проверяем, есть ли у него записи. Если есть, мы выводим каждую запись. Если нет, мы выводим сообщение о том, что записей не найдено.
Надеюсь, это поможет тебе реализовать фильтрацию записей по географическим меткам на твоем WordPress-сайте. Удачи!