Вопрос или проблема
Здесь я упомянул 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
. Не забудьте протестировать на различных устройствах и браузерах для проверки совместимости.
Важные замечания
- Отладка ошибок: Если новое правило не работает, проверьте файл
.htaccess
на наличие необходимых директив, которые добавляются автоматически при сохранении постоянных ссылок. - Кэширование: Убедитесь, что кэш WordPress (если используется) очищен, чтобы изменения вступили в силу.
- Тестирование: Обязательно протестируйте работоспособность в разных условиях, чтобы удостовериться, что URL корректно обрабатываются.
Следуя этим шагам, вы сможете успешно переписать URL-адрес в WordPress. Это может помочь не только в организации ссылок, но и в оптимизации для поисковых систем.