Quiero generar slug para algunas cadenas sin pasar por el flujo de generación de slug de WordPress. Por lo tanto, quiero saber qué funciones llama para obtener una buena babosa. Intenté sanitize_title () pero deja como resultado% c2% a0.
seo
slug
sanitization
un ventilador
fuente
fuente
èäç
etc. se mantendrán en su lugar con esta función.sanitize_title_with_dashes
además desanitize_title
dejar algunos caracteres especiales que pueden romper algunos sistemas. Quiero un enfoque más universal en la reducción de cuerdas eche un vistazosanitize_html_class
Bueno, ya hay una respuesta, pero quería expandirla un poco, así que aquí están mis hallazgos:
Si observamos
wp_insert_post()
, vemos que$post_name
se desinfecta usandowp_sanitize_title()
(verwp-includes/post.php
)En la función
sanitize_title()
tenemos un filtrosanitize_title
. Esto es interesante, ya que en los filtros predeterminadossanitize_title_with_dashes()
está conectado a este filtro (verwp-includes/default-filters.php
).Esto suena extraño Sería genial conocer el valor de entrada, pero seguir
wp_insert_post()
sanitize_title()
parece ser suficiente.fuente
sanitize_title()
parece ser el único que necesitas.En wp-includes / default-filters.php línea 211 encontrarás:
Esto significa que llamar
sanitize_title()
primero eliminará todos los caracteres especiales, luego aplicará elsanitize_title
filtro, llamando asísanitize_title_with_dashes()
Como señaló @JHoffmann, simplemente llamar
sanitize_title_with_dashes()
no eliminará caracteres especiales.fuente
Además de la excelente respuesta de websupporter, encontré lo siguiente:
Dependiendo de su uso, dependerá de lo que necesite.
sanitize_title()
como dice:... y
sanitize_title_with_dashes
dice:Entonces, con este ejemplo de cadena:
Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
resultado:Como puede ver, ha reemplazado los caracteres acentuados con sus equivalentes no acentuados y ha eliminado todos los demás caracteres no alfanuméricos aparte del
%
que va seguido de un número, pero verá que se eliminó cuando fue seguido por una letra; quizás esto se deba a que lo percibe como ya codificado . Esto se aplica cuando intenta insertar%c3
en su cadena, no lo despoja, ya que%c3
es una secuencia de codificación válida.sanitize_title_with_dashes
resultado:Como puede ver, no ha eliminado los caracteres acentuados, sino que los ha codificado.
Ahora veamos una cadena sin caracteres acentuados para ver cómo se comportan ambos ...
Cadena de ejemplo:
%%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title()
resultado:sanitize_title_with_dashes
resultado:Como puede ver, son exactamente lo mismo. Parece que la única diferencia en ellos es que uno codifica cartas acentuadas mientras que el otro las reemplaza .
fuente