Вопрос или проблема
У меня есть две таксономии: Жанры и Поводы. Я хочу, чтобы мои параметры были “переведены” и обрабатывались так же, как и мои оригинальные параметры. В настоящее время они реагируют должным образом только на параметры, такие как ?tax-genre= и ?tax-occasion=.
Я использую эту функцию для перевода параметров:
public function translate_taxonomy_params() {
$translated = [];
if (isset($_REQUEST['genre'])) {
if (is_array($_REQUEST['genre'])) {
$translated['tax-genre'] = $_REQUEST['genre'];
} else {
$translated['tax-genre'] = [$_REQUEST['genre']];
}
unset($_REQUEST['genre']);
}
if (isset($_REQUEST['occasion'])) {
if (is_array($_REQUEST['occasion'])) {
$translated['tax-occasion'] = $_REQUEST['occasion'];
} else {
$translated['tax-occasion'] = [$_REQUEST['occasion']];
}
unset($_REQUEST['occasion']);
}
return array_merge($_REQUEST, $translated);
}
Хотя это работает для получения правильных записей на страницах архивов, это не устанавливает правильные флажки в боковой панели фильтров, несмотря на то, что мой запрос таксономии установлен правильно:
[tax_query] => Array
(
[0] => Array
(
[taxonomy] => genre
[field] => slug
[terms] => Array
(
[0] => thriller
)
)
)
Мой вопрос в том, как я могу сделать так, чтобы параметры URL вели себя так же, как оригинальные параметры? В частности, как можно интерпретировать ?genre=thriller в бэкенде как ?tax-genre=thriller на каждой странице/функции?
Я использую AJAX для фильтрации результатов и динамически обновляю URL с помощью jQuery, чтобы посетитель мог легко вернуться к своим предыдущим отфильтрованным результатам, если он откроет запись. Однако префикс “tax-” выглядит менее удобным для пользователя.
Любая помощь или предложения будут очень признательны!
Ответ или решение
Изменение параметров URL для таксономий в WordPress: Коррекция функциональности и повышение удобства использования
Введение
Вместо того чтобы просто полагаться на стандартные параметры таксономии ?tax-genre=
и ?tax-occasion=
, вы стремитесь к более удобной замене через использование ?genre=
и ?occasion=
. Данная статья направлена на решение вашей задачи, чтобы параметры URL обрабатывались так же, как и оригинальные. Это обеспечит не только более дружественный интерфейс для пользователей, но и упрощение работы с фильтрацией записей на вашем сайте.
Понимание Проблемы
Ваша функция translate_taxonomy_params()
уже частично выполняет задачу корректного преобразования параметров. Однако, чтобы обеспечить единую работу с параметрами на всех страницах и во всех функциях, необходимо учитывать несколько дополнительных моментов, таких как обработка AJAX-запросов и синхронизация состояния чекбоксов в боковой панели фильтров.
Предложенное Решение
Для достижения вашей цели мы можем расширить функцию translate_taxonomy_params()
и внести соответствующие изменения в AJAX-обработчики. Вот детальная пошаговая инструкция:
Шаг 1: Расширение функции translate_taxonomy_params()
Убедитесь, что ваша функция корректно обновляет $_REQUEST
и работает с синтаксисом GET
в WordPress:
public function translate_taxonomy_params() {
$translated = [];
if (isset($_REQUEST['genre'])) {
$translated['tax-genre'] = (array) $_REQUEST['genre'];
unset($_REQUEST['genre']);
}
if (isset($_REQUEST['occasion'])) {
$translated['tax-occasion'] = (array) $_REQUEST['occasion'];
unset($_REQUEST['occasion']);
}
// Обработка для поддержки множественных значений
if (isset($_REQUEST['tax-genre'])) {
$translated['genre'] = (array) $_REQUEST['tax-genre'];
}
if (isset($_REQUEST['tax-occasion'])) {
$translated['occasion'] = (array) $_REQUEST['tax-occasion'];
}
return array_merge($_REQUEST, $translated);
}
Шаг 2: Обработка AJAX-запросов
Убедитесь, что ваши AJAX-запросы обрабатывают и переводят параметры, используя вашу функцию. Пример может выглядеть следующим образом:
add_action('wp_ajax_your_custom_ajax_action', 'your_custom_ajax_handler');
add_action('wp_ajax_nopriv_your_custom_ajax_action', 'your_custom_ajax_handler');
function your_custom_ajax_handler() {
// Применение функции для перевода параметров
$params = your_class_instance->translate_taxonomy_params();
// Теперь вы можете использовать $params для вашего tax_query
$query = new WP_Query(array(
'tax_query' => array(
array(
'taxonomy' => 'genre',
'field' => 'slug',
'terms' => $params['tax-genre'] ?? array(),
),
array(
'taxonomy' => 'occasion',
'field' => 'slug',
'terms' => $params['tax-occasion'] ?? array(),
),
),
));
// Ваш код для обработки результатов
wp_send_json($query->posts);
}
Шаг 3: Обновление состояние чекбоксов
Для обновления состояния чекбоксов в боковой панели фильтров при загрузке страницы отправьте соответствующие параметры на клиент:
$(document).ready(function() {
const urlParams = new URLSearchParams(window.location.search);
const genres = urlParams.getAll('tax-genre');
const occasions = urlParams.getAll('tax-occasion');
// Установка состояния чекбоксов
genres.forEach(genre => {
$(`input[name='genre'][value='${genre}']`).prop('checked', true);
});
occasions.forEach(occasion => {
$(`input[name='occasion'][value='${occasion}']`).prop('checked', true);
});
});
Заключение
Теперь вы имеете полное решение для управления параметрами URL таксономий через более удобные и понятные имена. Важно провести квалифицированное тестирование этого решения, чтобы убедиться в его корректной работе на вашем сайте. Используйте представленный код как отправную точку для дальнейшей настройки и улучшения функциональности фильтрации. Это решение не только улучшит пользовательский опыт, но и обеспечит целостность обработки данных на серверной стороне.