¿Hay alguna página en algún lugar que detalle exactamente cómo WordPress genera babosas para 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 babosas para URL? Estoy escribiendo un script que necesita generar slugs de URL idénticos a los que genera WordPress.
Respuestas:
De buenas a primeras, no puedo darle una página / tutorial / documentación sobre cómo se generan las babosas de WP, pero eche un vistazo a la sanitize_title()
función.
No tener una impresión equivocada por el nombre de la función, es no significaba para desinfectar un título para el uso más como una página / título de la entrada . Toma una cadena de título y la devuelve para usarla en una URL:
No puede haber casos en los bordes, donde el núcleo hace algo adicional (que tendría que mirar a la fuente para verificar que sanitize_title()
se siempre suficiente en la generación de exactamente la misma que espera), pero esto se debe cubrir al menos el 99%, si no todos, los casos .
sanitize_title
filtro aplicado en la función, o si eso es manejado por otra cosa después de que la función se haya ejecutado.
sanitize_title
filtro que hay que revisar. Pero también hay otras funciones relacionadas . Realmente no tengo idea de esto. A veces parece que SimplePie
es más fácil de entender que la WP_Rewrite
cosa. Por cierto: Toscho trabaja en la integración de la funcionalidad "Monkeyman Rewrite Analyzer" en su complemento. Ahí es donde las cosas comienzan a ponerse realmente interesantes.
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 cómo funciona la función wp url sanitize.
No hay un modo de desarrollador integrado en WordPress aparte WP_DEBUG
, lo que no te ayuda demasiado en este caso. Básicamente, WP utiliza la "API de reescritura" , que es un contenedor de bajo nivel basado en funciones para la WP_Rewrite
clase, sobre el que puede leer en el Codex . El global $wp_rewrite
objeto está a su servicio para inspeccionarlo o interactuar con la clase.
Toschos "T5 Rewrite" -Plugin y Jan Fabrys "Monkeyman Rewrite Analyzer" -Plugin lo guiarán en su camino. He escrito una pequeña extensión para "T5 Rewrite" para integrarlo sin problemas con el "Monkeyman Rewrite Analyzer", que puedes encontrar en la wikie de repositorios "T5 Rewrite" aquí en GitHub .
El complemento "Monkeyman" agrega una nueva página, archivada en el menú de la interfaz de usuario del administrador en Herramientas . El complemento "Reescribir T5" agrega una nueva pestaña de ayuda a la página Configuración > Enlaces permanentes . Mi extensión también agrega las pestañas de ayuda a la página de herramientas mencionada .
Aquí hay una captura de pantalla de cómo se ve el contenido de la pestaña de ayuda "T5 Rewrite".
Vorlage = Patrón | Beschreibung = Explicación | Beispiele = Ejemplos
El complemento "T5 Rewrite" hace un trabajo maravilloso al ayudarlo a inspeccionar el objeto de reescritura. Y lo hace aún más: agrega nuevas posibilidades. Por lo tanto, es (al menos en mis instalaciones) parte de mi paquete básico de complementos.
En realidad, si observa la función principal wp_insert_post (post.php), verá 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 );
La clave a tener en cuenta es que usa wp_unique_post_slug y sanitize_title:
wp_unique_post_slug( sanitize_title(
Perdone por reanudar una vieja pregunta, pero tuve la misma necesidad que descubrí 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 una doble desinfección.
El primero usa el save
modo, donde se eliminan las etiquetas HTML y PHP, y se eliminan los acentos (los caracteres acentuados se reemplazan por equivalentes no acentuados).
El segundo query
modo garantiza que todos los espacios se reemplacen con guiones.-
y se eliminen otros signos de puntuación.
¡Espero que esto ayude a alguien! :)