Вопрос или проблема
В WordPress я установил аргумент запроса в ajax следующим образом
add_action( 'wp_ajax_get_prepare_link', 'prepare_link');
add_action( 'wp_ajax_nopriv_get_prepare_link', 'prepare_link');
function prepare_link() {
// Выполните некоторую логику и получите название моделей
$url = add_query_arg( array(
'compare' => aaa-and-bbb-and-ccc,
), 'http://example.com/cars/' );
echo $url;
wp_die();
}
Таким образом, после этого я получил свой URL следующим образом
http://example.com/cars/?compare=aaa-and-bbb-and-ccc
Теперь из jQuery я перенаправляю страницу на URL ответа следующим образом
jQuery('a.compare-vechicles').click(function(e){
jQuery.ajax({
type: "POST",
url: script.ajax_url,
data: {
action : 'get_prepare_link',
},
success: function(data){
window.location = data; // Перенаправление на подготовленную ссылку
}
});
});
Теперь я хочу сделать его более удобным для SEO. Поэтому выходной URL должен отображаться таким образом
http://example.com/cars/compare/aaa-and-bbb-and-ccc
Чтобы достичь этого, я сделал следующим образом
add_action('init', 'custom_rewrite_basic' );
function custom_rewrite_basic() {
add_rewrite_rule('^compare/([^/]*)/?',
'index.php?pagename=$matches[1]',
'top');
}
Но это совсем не работает. Мог бы кто-нибудь сказать мне, как я могу это сделать?
Спасибо,
Эта функция add_query_arg добавляет аргумент после URL, который вы ввели.
Вам нужно получить удобный для восприятия URL, поэтому добавьте следующий код в ваш файл functions.php :
function custom_rewrite_rule() {
add_rewrite_rule('^cars/([^/]*)/([^/]*)/?','index.php?page_id=PAGE_ID&type=$matches[1]&models=$matches[2]','top');
flush_rewrite_rules();
}
add_action('init', 'custom_rewrite_rule', 10, 0);
function custom_rewrite_tag() {
add_rewrite_tag('%type%', '([^&]+)');
add_rewrite_tag('%models%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
add_action( 'wp_ajax_get_prepare_link', 'prepare_link');
add_action( 'wp_ajax_nopriv_get_prepare_link', 'prepare_link');
function prepare_link() {
$url = "";
$url .= get_the_permalink( PAGE_ID );
$url .= "compare/aaa-and-bbb-and-ccc";
echo $url;
wp_die();
}
В приведенном выше коде замените “PAGE_ID” на ID вашей страницы “автомобиля”.
Ответ или решение
Чтобы сделать URL-адреса, генерируемые с помощью AJAX в WordPress, более удобными для SEO, необходимо понимать механизмы работы с перезаписью правил (rewrite rules) и правильным формированием URL-адресов. Ваша задача — преобразовать URL с параметрами запроса в более «читаемый» формат. Для достижения этой цели мы можем использовать функции WordPress, такие как add_rewrite_rule
и add_rewrite_tag
, а также get_the_permalink
.
Вот последовательный подход к решению вашей проблемы.
Шаг 1: Создание рекурсивных правил перезаписи
Для начала, создайте правила перезаписи, которые позволят использовать «красивые» URL. Добавьте следующий код ко всему имеющемуся коду в вашем файле functions.php
:
function custom_rewrite_rule() {
add_rewrite_rule('^cars/compare/([^/]*)/?', 'index.php?pagename=cars&compare=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
Этот код определяет правило для обработки URL-адресов, которые начинаются с /cars/compare/
, и перенаправляет их на страницу с pagename=cars
, передавая значение параметра через $matches[1]
.
Шаг 2: Обязательно очистите правила перезаписи
После добавления нового правила перезаписи важно очистить кэш правил, используя функцию flush_rewrite_rules()
. Это можно сделать вручную, перейдя в админку WordPress на страницу «Настройки» -> «Постоянные ссылки» и просто нажав на кнопку «Сохранить изменения». Также можно добавить flush_rewrite_rules()
в код, но только один раз, при активации темы или плагина:
register_activation_hook(__FILE__, 'flush_rewrite_rules');
Шаг 3: Обновление функции prepare_link
Теперь давайте изменим функцию prepare_link
, чтобы формировать URL так, как вам нужно:
add_action( 'wp_ajax_get_prepare_link', 'prepare_link');
add_action( 'wp_ajax_nopriv_get_prepare_link', 'prepare_link');
function prepare_link() {
// Пример логики для определения модели
$compare_param = 'aaa-and-bbb-and-ccc'; // Замените этот вариант на динамически получаемые данные
$url = get_site_url() . '/cars/compare/' . $compare_param;
echo esc_url($url); // Используй esc_url() для безопасного вывода URL
wp_die();
}
Шаг 4: AJAX запрос и редирект
Ваш AJAX запрос уже настроен правильно, и вы можете его оставить без изменений. Он перенаправляет пользователя на сгенерированный URL:
jQuery('a.compare-vechicles').click(function(e){
e.preventDefault(); // Чтобы предотвратить стандартное поведение ссылки
jQuery.ajax({
type: "POST",
url: script.ajax_url,
data: {
action : 'get_prepare_link',
},
success: function(data){
window.location = data; // Перенаправление на подготовленный URL
}
});
});
Заключение
Теперь ваша система может генерировать «дружественные» SEO URL-адреса для страницы с автомобилями. Убедитесь, что вы заменили любые статические параметры (такие как aaa-and-bbb-and-ccc
) на динамические, полученные через пользовательский ввод или бизнес-логические операции. Это будет способствовать улучшению видимости в поисковых системах и большему объему трафика на ваш сайт.