¿Cómo genera WordPress slugs de URL?

11

¿Hay alguna página en algún lugar que detalle exactamente cómo WordPress genera las babosas para las URL? Estoy escribiendo un script que necesita generar slugs de URL idénticos a los que genera WordPress.

    
pregunta George Edison 30.11.2012 - 03:24

5 respuestas

11

Fuera del bate, no puedo darle una página / tutorial / documentación sobre cómo se generan las babosas WP, pero eche un vistazo a sanitize_title() función.

No obtenga una impresión errónea por el nombre de la función, no está destinado a limpiar un título para su uso posterior como título de página / publicación . Toma una cadena de título y la devuelve para usarla en una URL:

  • tiras de HTML y amp; PHP
  • quita caracteres especiales
  • convierte todos los caracteres a minúsculos
  • reemplaza espacios en blanco, guiones bajos y puntos por guiones / guiones
  • reduce múltiples guiones consecutivos a uno

Hay podría casos de borde donde el núcleo hace algo adicional (tendrías que mirar la fuente para verificar que sanitize_title() siempre será suficiente para generar < em> exactamente lo mismo que espera), pero esto debería cubrir al menos el 99%, si no todos los casos.

    
respondido por el Johannes Pille 30.11.2012 - 03:42
4

Core a tu servicio

No hay modo de desarrollador integrado en WordPress aparte de WP_DEBUG , lo que no ayuda mucho en este caso. Básicamente, WP utiliza la "Rewrite API" , que es una envoltura de bajo nivel basada en funciones para WP_Rewrite class, sobre la que puede leer en Codex . El objeto global $wp_rewrite está a su servicio para inspeccionarlo o interactuar con la clase.

Complementos que ayudan a buscarlo.

Toschos "T5 Rewrite" -Plugin y Jan Fabrys" Monkeyman Rewrite Analyzer "-Plugin lo guiará en su camino. He escrito una pequeña extensión para "T5 Rewrite" para integrarla sin problemas con el "Monkeyman Rewrite Analyzer", que puede encontrar en los repositorios de "T5 Rewrite" wikie aquí en GitHub .

El complemento "Monkeyman" agrega una nueva página, archivada en el menú de la interfaz de usuario de administración en Herramientas . El complemento "T5 Rewrite" agrega una nueva pestaña de ayuda en Configuración > Permalinks página. Mi extensión agrega las pestañas de ayuda a la página Herramientas mencionada también.

Aquí hay una captura de pantalla de cómo se ve el contenido de la pestaña de ayuda "T5 Rewrite" -plugins.

Vorlage=Patrón|Beschreibung=Explicación|Beispiele=Ejemplos

Notas

Elplugin"T5 Rewrite" hace un trabajo maravilloso al ayudarlo a inspeccionar el objeto de reescritura. Y lo hace aún más: añade nuevas posibilidades. Por lo tanto, es (al menos en mis instalaciones) parte de mi paquete de complementos básicos.

    
respondido por el kaiser 30.11.2012 - 03:38
3

Puedes usar esta función:

static public function slugify($text)
{
  // replace non letter or digits by -
  $text = preg_replace('~[^\pL\d]+~u', '-', $text);

  // transliterate
  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

  // remove unwanted characters
  $text = preg_replace('~[^-\w]+~', '', $text);

  // trim
  $text = trim($text, '-');

  // remove duplicate -
  $text = preg_replace('~-+~', '-', $text);

  // lowercase
  $text = strtolower($text);

  if (empty($text)) {
    return 'n-a';
  }

  return $text;
}

Es exactamente como funciona la función wp url sanitize.

    
respondido por el Vivek Sancheti 08.06.2016 - 09:35
2

En realidad, si observas la función principal wp_insert_post (post.php), verás que hace lo siguiente:

$data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'], $post_ID ), $post_ID, $data['post_status'], $post_type, $post_parent );

$wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );

Lo importante a tener en cuenta es que usa wp_unique_post_slug y sanitize_title:

wp_unique_post_slug( sanitize_title( 
    
respondido por el Jahmic 26.09.2016 - 11:38
0

Perdóname por reanudar una pregunta anterior, pero tuve la misma necesidad que este método funciona perfectamente para mí:

$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now

Este método utiliza un doble desinfección.

El primero utiliza el modo save , donde se eliminan las etiquetas HTML y PHP, y se eliminan los acentos (los caracteres acentuados se reemplazan con equivalentes no acentuados).

El segundo modo query garantiza que todos los espacios se reemplacen con los guiones - y se elimine otra puntuación.

Espero que esto ayude a alguien! :)

    
respondido por el GigiSan 05.06.2018 - 12:23

Lea otras preguntas en las etiquetas