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.
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.
Respuestas:
Ya casi has llegado. La función que necesita es sanitize_title_with_dashes ($ title)
èäç
etc. se mantendrán en su lugar con esta función.
sanitize_title_with_dashes
además de sanitize_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 usando wp_sanitize_title()
(ver wp-includes/post.php
)
En la función sanitize_title()
tenemos un filtro sanitize_title
. Esto es interesante, ya que en los filtros predeterminados sanitize_title_with_dashes()
está conectado a este filtro (ver wp-includes/default-filters.php
).
<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>
Intenté sanitize_title () pero deja como resultado% c2% a0.
Esto suena extraño Sería genial conocer el valor de entrada, pero seguir wp_insert_post()
sanitize_title()
parece ser suficiente.
sanitize_title()
parece ser el único que necesitas.
En wp-includes / default-filters.php línea 211 encontrarás:
add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);
Esto significa que llamar sanitize_title()
primero eliminará todos los caracteres especiales, luego aplicará el sanitize_title
filtro, llamando asísanitize_title_with_dashes()
Como señaló @JHoffmann, simplemente llamar sanitize_title_with_dashes()
no eliminará caracteres especiales.
Además de la excelente respuesta de websupporter, encontré lo siguiente:
Dependiendo de su uso, dependerá de lo que necesite.
sanitize_title()
como dice:
los acentos se eliminan (los caracteres acentuados se reemplazan por equivalentes no acentuados)
... y sanitize_title_with_dashes
dice:
Tenga en cuenta que no reemplaza caracteres especiales acentuados
Entonces, con este ejemplo de cadena:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
resultado:
aa-o-sa-% 20-oo-pp -_- eac
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:
% c3% a2% c3% a4-% c3% b6-% c3% 9f% c3% a1-% 20-oo-pp -_-% c3% a8% c3% a4% c3% a7
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:
edificio-% 20-oo-pp-_
sanitize_title_with_dashes
resultado:
edificio-% 20-oo-pp-_
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 .