Evitar enlaces permanentes numéricos en WordPress con esta función

Si no incluimos un título antes de guardar el artículo como borrador o publicarlo, WordPress añade automáticamente el post_name (o slug) numérico basado en el id del artículo. Sabes a qué me refiero, ¿verdad?

El caso es que, en algunas ocasiones nos olvidamos de editar el slug antes de publicar nuestro artículo y claro, queda tremendamente feo un slug numérico (y no es que ayude mucho al SEO, por ejemplo).

Por eso, he creado esta función, que se encarga de reescribir el slug en el momento que guardamos o publicamos el post:

/*
*	Rewrite post_name (slug) before publish it using
*	WordPress function.
*/
// initial hook
add_action( 'save_post', 'rewrite_post_name' );
 
function rewrite_post_name( $post_id ) {
 
    // verify post is not a revision
    if ( ! wp_is_post_revision( $post_id ) ) {
        // unhook this function to prevent infinite looping
        remove_action( 'save_post', 'rewrite_post_name' );
 
        $post_name = get_post_meta ( $post_id, 'post_name' );
        $post_id2 = $post_id . "-2";
 
        if( $post_name === $post_id || $post_name === $post_id2 ){
	    // update the post slug
	    wp_update_post( array(
	        'ID' => $post_id,
	        'post_name' => '' // Rewrite based on Post Title
	    ));
	}
 
        // re-hook this function
        add_action( 'save_post', 'rewrite_post_name' );
    }
}

Explicándola paso a paso, tendríamos algo tal que así:

  • Primero, añadimos la llamada a la función que re-escribe el slug al hook “save_post”; lo que hará que cada vez que guardemos un post se invoque a dicha función.
  • A continuación creamos la función encargada de re-escribir el slug.
    • Comprueba que no es una revisión, no nos interesa hacer esta comprobación para todas las revisiones.
    • Recogemos los datos en dos variables: Por un lado el post_name (o slug) actual del artículo, por otro agregamos un -2 al post_id original por si es un artículo previamente descartado. Esto suele ocurrir en WordPress.
    • A continuación hacemos la actualización del campo post_name sólo si el actual post_name (o slug) es igual al ID del post o al ID del post seguido de un “-2”.
    • Las líneas donde desenganchamos el hook save_post y lo reenganchamos no es necesario que entendáis por qué están ahí; pero -en resumen- evitan que entremos en un bucle infinito de actualización del campo post_name.

Esta función la puedes utilizar en tu instalación de WordPress copiándola en el functions.php de tu tema.

Puede mejorarNo está malMe gustaEs bueno¡Excelente! (Ninguna valoración todavía)
Cargando…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

DARÍO BALBONTÍN FERNÁNDEZ es el Responsable del tratamiento de los datos personales del usuario y le informa que estos datos serán tratados de conformidad con lo dispuesto en el Reglamento (UE) 2016/679 de 27 de abril de 2016 (GDPR), por lo que se le facilita la siguiente información del tratamiento: Fin del tratamiento: mantener una relación comercial y el envío de comunicaciones sobre nuestros productos y servicios. Criterios de conservación de los datos: se conservarán mientras exista un interés mutuo para mantener el fin del tratamiento y cuando ya no sea necesario para tal fin, se suprimirán con medidas de seguridad adecuadas para garantizar la seudonimización de los datos o la destrucción total de los mismos.Comunicación de los datos: No se comunicarán los datos a terceros, salvo obligación legal. Derechos que asisten al usuario: Derecho a retirar el consentimiento en cualquier momento. Derecho de acceso, rectificación, portabilidad y supresión de sus datos y a la limitación u oposición al su tratamiento. Derecho a presentar una reclamación ante la Autoridad de control (agpd.es) si considera que el tratamiento no se ajusta a la normativa vigente. Datos de contacto para ejercer sus derechos: contacto@dariobf.com.