¿Sanitize_title es suficiente para generar slugs posteriores?

14

Quiero generar slug para algunas cadenas sin pasar por el flujo de generación de slug de WordPress. Por lo tanto, quiero saber a qué funciones llama para obtener un slug limpio. Intenté sanitize_title () pero deja% c2% a0 en el resultado.

    
pregunta a_fan 06.07.2011 - 16:27

4 respuestas

26

Ya casi has llegado. La función que necesita es sanitize_title_with_dashes ($ title)

    
respondido por el Brady 06.07.2011 - 17:03
2

sanitize_title() parece ser el único que necesitas.

En la línea 211 de wp-includes / default-filters.php encontrará:

add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);

Esto significa que al llamar a sanitize_title() primero se eliminarán todos los caracteres especiales, luego se aplicará el filtro sanitize_title y, por lo tanto, se llamará a sanitize_title_with_dashes()

Como señaló @JHoffmann, simplemente llamar a sanitize_title_with_dashes() no eliminará los caracteres especiales.

    
respondido por el Jules 20.02.2018 - 11:25
1

Bueno, ya hay una respuesta, pero quería ampliarla un poco, así que aquí están mis conclusiones:

Si observamos en wp_insert_post() que vemos, $post_name se desinfecta usando wp_sanitize_title() (vea 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á enganchado a este filtro (vea wp-includes/default-filters.php ).

<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>
  

Intenté sanitize_title () pero deja% c2% a0 en el resultado.

Esto suena extraño. Sería genial conocer el valor de entrada, pero parece suficiente con wp_insert_post() sanitize_title() .

    
respondido por el websupporter 10.01.2017 - 13:58
0

Además de la excelente respuesta encontré la siguiente información:

Dependiendo de su uso, dependerá de lo que necesite.

sanitize_title() como dice:

  

se eliminan los acentos (los caracteres acentuados se reemplazan con equivalentes no acentuados)

... y sanitize_title_with_dashes dice:

  

Tenga en cuenta que no reemplaza los caracteres especiales acentuados

Entonces, con este ejemplo 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 es 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 intentas insertar %c3 en tu cadena, no se elimina porque %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 con no caracteres acentuados para ver cómo se comportan ...

Cadena de ejemplo: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?''~'

sanitize_title() resultado:

  

edificio-% 20-oo-pp-_

sanitize_title_with_dashes resultado:

  

edificio-% 20-oo-pp-_

Entonces, como puedes ver, son exactamente iguales. Así que parece que la única diferencia entre ellos es que una codifica las cartas con acento, mientras que la otra las reemplaza .

    
respondido por el Brett 30.07.2018 - 17:53

Lea otras preguntas en las etiquetas