Есть ли где-нибудь страница, где подробно описывается, как WordPress генерирует слагов для URL? Я пишу скрипт, который должен генерировать URL-слагов, идентичных тем, которые генерирует WordPress.
Я не могу дать вам страницу / учебник / документацию о том, как генерируются WP-слагы, но взгляните на sanitize_title()функцию.
Не поймите неправильно название функции, оно не предназначено для очистки заголовка для дальнейшего использования в качестве заголовка страницы / поста . Он берет строку заголовка и возвращает ее для использования в URL:
полоски HTML и PHP
полоски специальных символов
преобразует все символы в нижние
заменяет пробелы, подчеркивания и точки на дефисы / тире
уменьшает количество последовательных штрихов до одного
Там может быть крайние случаи , когда ядро делает что - то дополнительное (вы должны смотреть на источник , чтобы убедиться в том , что sanitize_title()будет всегда хватает в генерации точно такой же вы ожидали), но это должно охватывать по крайней мере , 99%, если не во всех случаях ,
@kaiser: Я подумал, что ты просто влюблен в T5 Rewrite :) (который стоит посмотреть в моей программе) | и вообще: если заголовок действительно длинный, WP также обрезает слагов до определенной максимальной длины. Это один из тех случаев, когда я не совсем уверен, что это делается с помощью sanitize_titleфильтра, применяемого также в функции, или же это обрабатывается чем-то другим после запуска функции.
Йоханнес Пилле
Я думаю, это sanitize_title-фильтр, который нужно проверить. Но есть и другие связанные функции . Я действительно понятия не имел об этом. Иногда кажется, что SimplePieэто легче понять, чем WP_Rewriteвещь. Кстати: Toscho работает над интеграцией функции Monkeyman Rewrite Analyzer в свой плагин. Вот где вещи начинают становиться действительно интересными.
Кайзер
1
Также подумайте о sanitize_title_with_dashes (), если вы хотите быть более откровенным о создании слаг-ориентированного URL-адреса.
Том Оже
5
Вы можете использовать эту функцию:
staticpublicfunction slugify($text){// replace non letter or digits by -
$text = preg_replace('~[^\pL\d]+~u','-', $text);// transliterate
$text = iconv('utf-8','us-ascii//TRANSLIT', $text);// remove unwanted characters
$text = preg_replace('~[^-\w]+~','', $text);// trim
$text = trim($text,'-');// remove duplicate -
$text = preg_replace('~-+~','-', $text);// lowercase
$text = strtolower($text);if(empty($text)){return'n-a';}return $text;}
Это своего рода, как работает функция wp url sanitize.
В WordPress нет встроенного режима разработчикаWP_DEBUG , который в этом случае не сильно вам поможет. В основном WP использует «Rewrite API» , низкоуровневую оболочку для WP_Rewriteкласса, основанную на функциях , о которой вы можете прочитать в Кодексе . global $wp_rewriteОбъект находится в вашем распоряжении , чтобы проверить его или взаимодействовать с классом.
Плагин T5 Rewrite отлично справляется с задачей проверки объекта перезаписи. И это делает еще больше: это добавляет новые возможности. Поэтому это (по крайней мере, в моих установках) часть моего базового пакета плагинов.
Этот метод использует двойную санитарную обработку.
Первый использует saveрежим, в котором теги HTML и PHP удаляются, а акценты удаляются (акцентированные символы заменяются неакцентированными эквивалентами).
Второй queryрежим обеспечивает замену всех пробелов тире -и удаление других знаков препинания.
Ответы:
Я не могу дать вам страницу / учебник / документацию о том, как генерируются WP-слагы, но взгляните на
sanitize_title()
функцию.Не поймите неправильно название функции, оно не предназначено для очистки заголовка для дальнейшего использования в качестве заголовка страницы / поста . Он берет строку заголовка и возвращает ее для использования в URL:
Там может быть крайние случаи , когда ядро делает что - то дополнительное (вы должны смотреть на источник , чтобы убедиться в том , что
sanitize_title()
будет всегда хватает в генерации точно такой же вы ожидали), но это должно охватывать по крайней мере , 99%, если не во всех случаях ,источник
sanitize_title
фильтра, применяемого также в функции, или же это обрабатывается чем-то другим после запуска функции.sanitize_title
-фильтр, который нужно проверить. Но есть и другие связанные функции . Я действительно понятия не имел об этом. Иногда кажется, чтоSimplePie
это легче понять, чемWP_Rewrite
вещь. Кстати: Toscho работает над интеграцией функции Monkeyman Rewrite Analyzer в свой плагин. Вот где вещи начинают становиться действительно интересными.Вы можете использовать эту функцию:
Это своего рода, как работает функция wp url sanitize.
источник
Ядро к вашим услугам
В WordPress нет встроенного режима разработчика
WP_DEBUG
, который в этом случае не сильно вам поможет. В основном WP использует «Rewrite API» , низкоуровневую оболочку дляWP_Rewrite
класса, основанную на функциях , о которой вы можете прочитать в Кодексе .global $wp_rewrite
Объект находится в вашем распоряжении , чтобы проверить его или взаимодействовать с классом.Плагины, которые помогают разобраться в этом.
Toschos "T5 Rewrite" - плагин и Ян Фабрис "Monkeyman Rewrite Analyzer" - плагин поможет вам в этом. Я написал небольшое расширение для «T5 Rewrite», чтобы плавно интегрировать его с «Monkeyman Rewrite Analyzer», который вы можете найти в вики репозитория «T5 Rewrite» здесь, на GitHub .
Плагин Monkeyman добавляет новую страницу, хранящуюся в меню интерфейса администратора в разделе Инструменты . Плагин «T5 Rewrite» добавляет новую вкладку справки на страницу « Настройки» > « Постоянные ссылки» . Мое расширение также добавляет вкладки справки на упомянутую страницу инструментов .
Вот скриншот того, как выглядит содержимое вкладки справки "T5 Rewrite".
Vorlage = Шаблон | Beschreibung = Объяснение | Beispiele = Примеры
Примечания
Плагин T5 Rewrite отлично справляется с задачей проверки объекта перезаписи. И это делает еще больше: это добавляет новые возможности. Поэтому это (по крайней мере, в моих установках) часть моего базового пакета плагинов.
источник
На самом деле, если вы посмотрите основную функцию wp_insert_post (post.php), вы увидите, что она выполняет следующее:
Главное, на что нужно обратить внимание, это то, что используются как wp_unique_post_slug, так и sanitize_title:
источник
Простите за возобновление старого вопроса, но у меня была такая же необходимость, как выяснилось, этот метод отлично работает для меня:
Этот метод использует двойную санитарную обработку.
Первый использует
save
режим, в котором теги HTML и PHP удаляются, а акценты удаляются (акцентированные символы заменяются неакцентированными эквивалентами).Второй
query
режим обеспечивает замену всех пробелов тире-
и удаление других знаков препинания.Надеюсь, это поможет кому-то! :)
источник