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_dashesademás desanitize_titledejar algunos caracteres especiales que pueden romper algunos sistemas. Quiero un enfoque más universal en la reducción de cuerdas eche un vistazosanitize_html_classBueno, 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_namese 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_titlefiltro, 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_dashesdice: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%c3en su cadena, no lo despoja, ya que%c3es una secuencia de codificación válida.sanitize_title_with_dashesresultado: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_dashesresultado: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