Я хочу создать слаг для некоторых строк без прохождения потока генерации слагов WordPress. Поэтому я хочу знать, какие функции он вызывает, чтобы получить аккуратный слаг. Я попытался sanitize_title (), но он оставляет% c2% a0 в результате.
seo
slug
sanitization
болельщик
источник
источник
èäç
и т. Д., Останутся на месте с этой функцией.sanitize_title_with_dashes
так жеsanitize_title
оставляйте некоторые специальные символы, которые могут сломать некоторые системы. Если вы хотите более универсальный подход к сокращению строк, взгляните наsanitize_html_class
Ну, ответ уже есть, но я хотел его немного расширить, поэтому вот мои выводы:
Если мы посмотрим на
wp_insert_post()
то, что мы видим, то$post_name
его дезинфицируют, используяwp_sanitize_title()
(см.wp-includes/post.php
)В функции
sanitize_title()
у нас есть фильтрsanitize_title
. Это интересно, поскольку фильтры по умолчаниюsanitize_title_with_dashes()
подключены к этому фильтру (см.wp-includes/default-filters.php
).Это звучит странно. Было бы замечательно узнать входное значение, но следующего
wp_insert_post()
sanitize_title()
вполне достаточно.источник
sanitize_title()
кажется, единственный, что вам нужно.В строке 211 wp-includes / default-filters.php вы найдете:
Это означает, что при вызове
sanitize_title()
сначала будут удалены все специальные символы, затем будет примененsanitize_title
фильтр, таким образом, вызовsanitize_title_with_dashes()
Как отметил @JHoffmann, простое обращение
sanitize_title_with_dashes()
не удалит специальные символы.источник
В дополнение к отличному ответу websupporter я нашел следующее:
В зависимости от вашего использования это будет зависеть от того, что вам нужно.
sanitize_title()
как говорится:... и
sanitize_title_with_dashes
говорит:Итак, с этим примером строки:
Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
результат:Как вы можете видеть, он заменил акцентированные символы их неакцентированными эквивалентами и удалил все другие не алфавитно-цифровые символы, кроме тех,
%
за которыми следует число, но вы увидите, что он был удален, когда за ним следовала буква; возможно, это потому, что он воспринимает это как уже закодированное . Это применяется, когда вы пытаетесь вставить%c3
в вашу строку, она не удаляется, как%c3
допустимая последовательность кодирования.sanitize_title_with_dashes
результат:Итак, как вы можете видеть, он не удаляет акцентированные символы, а кодирует их.
Теперь давайте посмотрим на строку без акцентированных символов, чтобы увидеть, как они оба ведут себя ...
Пример строки:
%%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title()
результат:sanitize_title_with_dashes
результат:Итак, как вы можете видеть, они точно такие же. Таким образом, похоже, единственное различие в них состоит в том, что один кодирует акцентированные хартии, а другой заменяет их.
источник