shortcodes

Cómo eliminar los Shortcodes huérfanos en WordPress

Los shortcodes son códigos cortos que habitualmente utilizamos en el editor de texto para obtener una funcionalidad avanzada en el contenido de nuestras entradas, páginas, widgets, etc… En el artículo Shortcodes: ¿Qué son y cómo crearlos? los vimos con detalle y ejemplos prácticos.

Muchos temas y plugins utilizan shortcodes por ejemplo para incluir formularios de contacto, galerías de imágenes, bloques de información y/o aviso, publicidad, información relacionada, etc… pero ¿qué pasaría si el día de mañana decides cambiar de tema o dejas de utilizar un plugin que hace uso de ellos porque encuentras uno nuevo más completo o que te gusta más que el anterior?

Pues lo primero que pasa es que esos shortcodes dejarán de funcionar. Es decir, si tienes un plugin para agregar galerías de imágenes que utiliza shortcodes del tipo [gallery-plugin id=”1”], en el momento que desactives el plugin, ese shortcode no se ejecutará, y en el contenido de tu entrada o página verás literalmente como una cadena de texto: [gallery-plugin id=”1”]. Cuando esto pasa decimos que el shortcode se ha quedado huérfano.

Ante esta situación, podrías ir página por página y entrada por entrada revisando en cuál de ellas utilizas éste shortcode y eliminarlo manualmente. Si son pocas páginas puedes planteártelo, pero si tienes una cantidad ingente de posts, es cuando debes pensar en otras alternativas. Para evaluarlo, puedes crear un shortcode en functions.php que busque en todas las entradas/páginas el/los shortcodes huérfanos:

<?php

function shortcode_finder($atts, $content=null) {
    ob_start();

    $shortcode_atts = shortcode_atts( array(
        'find' => '',
    ), $atts );

    $string = $shortcode_atts['find'];

    $args = array(
        's' => $string,
        'posts_per_page' => "-1",
    );

    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ) {
        echo '<ul>';
            while ( $the_query->have_posts() ) {
                $the_query->the_post(); ?>
                    <li><a href="<?php the_permalink();?>"><?php the_title();?></a></li>
            <?php }
        echo '</ul>';
    } else {
        echo "No se han encontrado coincidencias";
    }

    wp_reset_postdata();
    return ob_get_clean();
}
add_shortcode('shortcodefinder', 'shortcode_finder');

Ahora crea una página nueva y escribe el shortcode [shortcodefinder find=’orphanshortcodeID’], donde orphanshortcodeID será el nombre de tu shortcode huérfano. Te mostrará un listado con todas las entradas y páginas donde se encuentra.

Si son muchas y te decides simplemente por ocultar el shortcode, añade en el functions.php o en tu plugin de utilidades la siguiente línea:

add_shortcode( 'orphanshortcodeID', '__return_false' );

NOTA

Ésta línea no lo borrará del contenido, simplemente no lo mostrará. Si quisieras realmente borrarlo de la base de datos tendrías que ir post por post borrándolos manualmente, o si son muchos y tienes conocimientos avanzados de MySQL, hacer una query directamente en base de datos eliminando las coincidencias con tu shortcode mediante expresiones regulares, siempre sacando una copia de seguridad de la base de datos primero por si las moscas 😉

Como casi cualquier cosa en WordPress, también puedes usar un plugin para ocultar los shortcodes huérfanos. Te recomiendo Remove Orphan Shortcodes.

No necesita configuración, simplemente busca shortcodes en el contenido (the_content) de tus entradas y páginas que coincidan con los declarados en la variable global $shortcode_tags, y en caso de encontrar alguno que no exista en $shortcode_tags, lo oculta.

¿Te ha resultado útil esta información? 🍺

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.

Comentarios

Deja un comentario

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

  • El fin del tratamiento es únicamente la moderación de comentarios para evitar spam
  • La legitimación es tu consentimiento al comentar
  • No se comunicará ningún dato a terceros salvo por obligación legal
  • Tienes derecho al acceso, rectificación y eliminación de los comentarios