¿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.
¿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.
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:
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.
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.
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
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.
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.
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(
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! :)