art30molch 06.04.2023 08:18

Как добавить возможность фильтрации записей по географическим меткам на 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();
?>

Буду очень благодарен за помощь в решении данной задачи! Спасибо заранее!

Ответы:

Sentimental42 06.04.2023 08:22
Для реализации фильтрации записей по географическим меткам в WordPress с помощью кода, тебе понадобится пользовательская таксономия "Местоположения" и небольшой кусок кода. Для начала, создай таксономию "Местоположения". Ты можешь сделать это с помощью плагинов, таких как "Custom Post Type UI" или "Toolset Types", или же написать код самостоятельно в файле functions.php темы. Вот пример кода для создания таксономии:

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-сайте. Удачи!
Grigory40Tech 06.04.2023 08:29
Вы можете использовать функцию add_query_arg() для создания ссылки с параметром местоположения, который будет передаваться при фильтрации записей.

Добавить ответ