Как переписать URL

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

Здесь я упомянул URL

http://localhost/wp/2016/?category_name=cricket

Теперь мне нужно изменить URL на

http://localhost/wp/cricket/2016.

Здесь cricket – это имя категории, а 2016 – год.

Удалите ?Query String Variable, не являющееся значением строки запроса в URL WordPress.

Я попробовал

RewriteRule ^([0-9]{4})/?$/(.+)/([^/]+)/?$ /index.php/$1/?category_name=$2[QSA,L]

Но это не работает

WordPress автоматически создаст правила переписывания, как только вы выберете формат постоянных ссылок. Вы можете сделать это в разделе Настройки > Постоянные ссылки в вашем административном интерфейсе WordPress. WordPress попытается записать в ваш .htaccess файл. Если это не получится, он предоставит вам некоторый код переписывания, который вы можете скопировать и вставить в ваш .htaccess файл.

В любом случае, WordPress преобразует URL в аргументы запроса. Если вы хотите изменить способ, которым WordPress интерпретирует URL и извлекает данные для отображения, вам нужно будет изучить Rewrite API.

Вы можете использовать что-то подобное для работы с массивами.

add_action('init', 'category_rewrite');

function category_rewrite() {

        global $wp_rewrite;
        $my_URL = $_SERVER['REDIRECT_URL'];
        // в моем примере я тестирую http://localhost/news-events/2015
        // Давайте сохраним второе значение 
        $my_URL_PATH=explode("https://wordpress.stackexchange.com/",$my_URL);

        $my_CAT = Array ('news-events'=>'cricket');


        $rule = $my_URL_PATH[1].'/(\d+)/?$';
        $rewrite="index.php?year=$matches[1]&category_name=".$my_CAT[$my_URL_PATH[1]];
        add_rewrite_rule($rule,$rewrite,'top');
        $wp_rewrite->flush_rules();
}

Используя приведенный ниже код, следующий исходный URL

http://localhost/cat/<catname>/<year> 

будет преобразован в

http://localhost/index.php?year=<year>&category_name=<catname>

Вставьте код в ваш файл functions.php

add_action('init', 'category_rewrite');

function category_rewrite() {
        global $wp_rewrite;
        $rule="cat/(.+?)/(\d+)/?$";
        $rewrite="index.php?year=$matches[2]&category_name=$matches[1]";
        add_rewrite_rule($rule,$rewrite,'top');
        $wp_rewrite->flush_rules();
}

Так где я делал ошибку.

  • Я не очищал правила
  • переписывание должно быть в одиночных кавычках, включая совпадения, вся строка должна быть в виде “не скомпилированной” строки, WordPress скомпилирует ее.

Ответ или решение

Чтобы изменить URL-адрес в WordPress с первоначального формата http://localhost/wp/2016/?category_name=cricket на новый формат http://localhost/wp/cricket/2016, вам потребуется воспользоваться функциональностью перезаписи URL, предоставляемой WordPress. Следующие шаги описывают, как это сделать.

Шаг 1: Убедитесь, что у вас включены "Постоянные ссылки"

Первым делом необходимо убедиться, что вы активировали функцию "Постоянные ссылки" в админ-панели WordPress. Для этого перейдите в раздел:

НастройкиПостоянные ссылки

Выберите один из доступных вариантов (например, "Имя записи") и сохраните изменения. Это позволит WordPress автоматически генерировать правила перезаписи и обновить файл .htaccess.

Шаг 2: Добавьте правила перезаписи в файл functions.php

Чтобы переписать URL в нужный формат, необходимо добавить пользовательское правило перезаписи в файл functions.php вашей активной темы. Вот пример кода, который позволит вам достичь желаемого результата:

add_action('init', 'category_rewrite');

function category_rewrite() {
    global $wp_rewrite;

    // Определяем шаблон URL
    $rule = '(.+)/([0-9]{4})/?$';
    // Говорим, как должен обрабатываться новый URL
    $rewrite = 'index.php?year=$matches[2]&category_name=$matches[1]';

    // Добавляем правило перезаписи
    add_rewrite_rule($rule, $rewrite, 'top');

    // Очищаём правила перезаписи
    $wp_rewrite->flush_rules();
}

Шаг 3: Очищение правил перезаписи

Обратите внимание, что при любом изменении правил перезаписи необходимо вызывать функцию flush_rules(). Это действие, как правило, требуется делать один раз после добавления или изменения правила. После этого WordPress будет использовать новые правила для обработки URL.

Шаг 4: Проверка работы нового URL

После внесения изменений перейдите к URL, который вы хотите протестировать, например:

http://localhost/wp/cricket/2016

Если всё правильно настроено, то он должен правильно отображать содержимое, соответствующее запрашиваемым параметрам year и category_name. Не забудьте протестировать на различных устройствах и браузерах для проверки совместимости.

Важные замечания

  1. Отладка ошибок: Если новое правило не работает, проверьте файл .htaccess на наличие необходимых директив, которые добавляются автоматически при сохранении постоянных ссылок.
  2. Кэширование: Убедитесь, что кэш WordPress (если используется) очищен, чтобы изменения вступили в силу.
  3. Тестирование: Обязательно протестируйте работоспособность в разных условиях, чтобы удостовериться, что URL корректно обрабатываются.

Следуя этим шагам, вы сможете успешно переписать URL-адрес в WordPress. Это может помочь не только в организации ссылок, но и в оптимизации для поисковых систем.

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

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