Хук sanitize_title
в WordPress предоставляет возможность изменить строку заголовка после её очистки, но до того, как она будет использована для формирования URL. Этот фильтр полезен, когда необходимо выполнить дополнительные операции с заголовком, например, транслитерацию, замену символов или приведение к нижнему регистру.
apply_filters( ‘sanitize_title’, string $title, string $raw_title, string $context )
Параметры
- $title (string): очищенный заголовок, который будет возвращён после применения фильтра.
- $raw_title (string): исходный заголовок, до очистки.
- $context (string): контекст, в котором заголовок очищается (например, при регистрации записи, при создании термина и т. д.).
Применение хука
Хук sanitize_title
вызывается через функцию apply_filters
. Обычно его используют для изменения заголовков перед их вставкой в URL или перед тем, как они будут записаны в базу данных.
Пример:
add_filter('sanitize_title', 'wp_kama_sanitize_title_filter', 10, 3);
function wp_kama_sanitize_title_filter($title, $raw_title, $context) {
// Примените дополнительные изменения к заголовку
return $title;
}
Пример 1: Преобразование заголовка в нижний регистр
Один из самых распространённых способов — это изменение заголовка в нижний регистр. Это особенно полезно, если вы хотите, чтобы все URL были в едином регистре.
add_filter('sanitize_title', 'strtolower');
Этот код изменяет все заголовки, приводя их к нижнему регистру, что помогает избежать дублирования URL.
Пример 2: Замена плюсов на дефисы
Иногда требуется заменить символы (например, плюсы) на другие символы (например, дефисы) для лучшего восприятия URL.
function wpdocs_plus_to_dash( $title ) {
return str_replace( '+', '-', $title );
}
add_filter( 'sanitize_title', 'wpdocs_plus_to_dash' );
Этот пример заменяет все плюсы в заголовке на дефисы, что делает URL более чистым и читаемым.
Пример 3: Транслитерация заголовков
Если вы работаете с языками, использующими нестандартные символы, можно использовать фильтр для транслитерации символов. Например, для преобразования кириллицы в латиницу.
add_filter('sanitize_title', 'ctl_sanitize_title', 9);
function ctl_sanitize_title($title) {
$iso9_table = array(
'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'YO', 'Ж' => 'ZH',
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh'
// Добавьте остальные символы...
);
$title = strtr($title, $iso9_table);
$title = preg_replace("/[^A-Za-z0-9'_\-\.]/", '-', $title);
$title = preg_replace('/\-+/', '-', $title);
$title = preg_replace('/^-+/', '', $title);
$title = preg_replace('/-+$/', '', $title);
return $title;
}
Этот пример заменяет кириллические символы на латиницу, обеспечивая правильную работу с URL.
Пример 4: Изменение заголовков для различных контекстов
Вы также можете изменить заголовки в зависимости от контекста, например, только для типов записей или терминов.
add_filter('sanitize_title', 'custom_sanitize_title_for_posts', 10, 3);
function custom_sanitize_title_for_posts($title, $raw_title, $context) {
if ('post' === $context) {
// Применить особую логику для заголовков типа "post"
$title = str_replace(' ', '-', $title);
}
return $title;
}
В этом примере заголовки для записей (post
) заменяются пробелами на дефисы, что полезно для создания более читаемых URL.
Заключение
Хук sanitize_title
предоставляет множество возможностей для обработки заголовков перед их использованием в URL. Используя фильтры, вы можете изменять заголовки по своему усмотрению — от приведения к нижнему регистру до транслитерации или замены определённых символов.