WordPress add_query_arg из ajax и сделать url дружелюбным

Вопрос или проблема

В 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');

Теперь давайте изменим функцию 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) на динамические, полученные через пользовательский ввод или бизнес-логические операции. Это будет способствовать улучшению видимости в поисковых системах и большему объему трафика на ваш сайт.

Оцените материал
Добавить комментарий

Капча загружается...