Вопрос или проблема
Я работаю над пользовательским генератором статических сайтов, используя WordPress. Я не могу понять, как убрать слеш, который идет после базы категории и базы тега. Я хочу заменить его на дефис.
В настоящее время я использую постобработку через PHP-скрипт и str_replace, но это значит, что я застреваю с тем, что жестко закодировал (это “category” и “tag” сейчас).
Есть предложения?
Я провел много исследований и придумал этот код, чтобы решить проблему, а также добавить “.html” к страницам, категориям и тегам. Настройка постоянных ссылок заботится о постах.
function hpct_page_rewrite($rules) {
foreach ($rules as $key => $value) {
$newrules[str_replace('/?', '.html', $key)] = $value;
}
return $newrules;
}
function hpct_page_link($link) {
return $link . '.html';
}
function hpct_category_rewrite($rules) {
foreach ($rules as $key => $value) {
$newrules[str_replace('/?', '.html', $key)] = $value;
}
return $newrules;
}
function hpct_category_link($link) {
return str_replace('category/', 'category-', $link) . '.html';
}
function hpct_tag_rewrite($rules) {
foreach ( $rules as $key => $value ) {
$newrules[str_replace('/?', '.html', $key)] = $value;
}
return $newrules;
}
function hpct_tag_link($link) {
return str_replace('tag/', 'tag-', $link) . '.html';
}
add_filter('page_rewrite_rules', 'hpct_page_rewrite', 3);
add_filter('page_link', 'hpct_page_link', 1);
add_filter('category_rewrite_rules', 'hpct_category_rewrite', 3);
add_filter('category_link', 'hpct_category_link', 1);
add_filter('tag_rewrite_rules', 'hpct_tag_rewrite', 3);
add_filter('tag_link', 'hpct_tag_link', 1);
Да, это тоже жестко закодировано, и я в конечном итоге позабочусь об этом. Но по крайней мере я могу сделать это изнутри WordPress.
Ответ или решение
Вопрос: Как удалить завершающий слэш из базовой структуры категорий и тегов в WordPress и заменить его на тире?
Контекст: Вы работаете над созданием статического сайта, используя WordPress, и хотите заменить завершающий слэш в URL категорий и тегов на тире через PHP-скрипт.
Обзор проблемы
Вы используете настраиваемый PHP-скрипт для управления URL структуры в WordPress, стремясь улучшить SEO и сделать сайт более дружелюбным для пользователей. В настоящее время вы используете str_replace
для преобразования URL, но ограничены жесткой кодировкой строк «category» и «tag».
Решение
Код, который вы предоставили, уже выполняет часть работы по преобразованию. Однако, его можно улучшить и привести настройки к более гибким, чтобы не было необходимости жестко прописывать значения.
Переписывание URL категорий и тегов
Для более универсального решения сделайте следующее:
-
Создайте функции для преобразования структуры URL:
- _hpct_categorylink: заменяет ‘category/’ на ‘category-‘ и добавляет ‘.html’
- _hpct_taglink: заменяет ‘tag/’ на ‘tag-‘ и добавляет ‘.html’
-
Оптимизируйте существующий код:
- Вместо жесткой кодировки используйте WordPress фильтры и хуки для динамического определения пути.
-
Используйте фильтры WordPress:
- Чтобы функции автоматически применялись ко всем категориям и тегам.
Пример улучшенного подхода:
function modify_structure($base, $link) {
return str_replace($base . '/', $base . '-', $link) . '.html';
}
function hpct_category_link($link) {
return modify_structure('category', $link);
}
function hpct_tag_link($link) {
return modify_structure('tag', $link);
}
add_filter('category_link', 'hpct_category_link', 10, 1);
add_filter('tag_link', 'hpct_tag_link', 10, 1);
Пояснения
- Функция
modify_structure
помогает устранить дублирование кода, позволяя задавать основу (base
) и обрабатывать URL с помощью одного универсального метода. - Обработка URL производится через фильтры WordPress, которые обеспечивают автоматическое внесение изменений, когда адреса категорий и тегов формируются.
Заключение
Следуя этому подходу, вы сможете избежать жесткой кодировки, сделав ваш код более гибким и легким для управления и дальнейшего обслуживания. Такой способ настройки не только улучшает структуру URL, но и положительно сказывается на SEO вашего сайта.
Коды, подходы и структуры, описанные здесь, должны быть тщательно протестированы в тестовой среде, чтобы убедиться в их корректной работе перед внедрением на живом сайте.