Cómo encontrar el ID de las publicaciones usando el Permalink | WordPress

Wordpress

Te explico como encontrar y editar una página, entrada, categoría o etiqueta de WordPress usando su Permalink. La solución final la he implementado en un plugin que puedes descargar haciendo clic en este botón:

¿Qué hace este plugin?

  • Añade una nueva caja de búsqueda en la sección Herramientas > Permalink Search
  • Puedes introducir el Permalink en la caja de búsqueda y te llevará directamente a la página, entrada, tag o categoría en cuestión, para que puedas editarla.

¿Para qué es útil esta funcionalidad?

Si tienes una web con cientos o miles de URLs en la que algunas de esas URLs están redirigidas hacia otras, no podrás acceder a las opciones de edición de la URL original, y tendrás que buscarla manualmente. Por desgracia, el buscador interno de WordPress es conocido por los malos resultados que arroja, y buscar una entrada o página puede convertirse en una tarea tediosa y a veces infructuosa.

Con este código podemos solventar el problema y conseguir editar directamente una página, entrada, categoría o etiqueta, introduciendo su Permalink. Al hacerlo, la función buscará el ID de la página o entrada y cargará el editor de ese contenido.

Cómo implementar tú mismo la solución

Si prefieres no instalar el plugin, te explico como añadir el código necesario para implementar esta nueva funcionalidad. Siéntete libre de modificarlo y redistribuirlo. Solo te pido que mantengas la autoría y URL original (la de esta página), no lo vendas, compártelo gratuitamente. ¡Gracias!

  • Tiempo de implementación: 5/7 min
  • Nivel de dificultad: Fácil

Crear el directorio y los ficheros para el plugin

Crea un directorio para tu plugin en el directorio wp-content/plugins de tu instalación de WordPress. Por ejemplo, podrías llamar a tu directorio permalink-search-plugin.

Dentro de este directorio, crea un archivo llamado permalink-search-plugin.php y otro llamado script.js

Contenido de permalink-search-plugin.php

En el archivo permalink-search-plugin.php, agrega el siguiente código:

<?php
/**
 * Plugin Name: WP Permalink Search
 * Description: Añade una funcionalidad para buscar páginas y entradas por permalink.
 * Version: 0.3
 * Author: Daniel Pajuelo
 * URL: https://danielpajuelo.com/encontrar-entradas-paginas-wordpress-permalink
 */

function psp_enqueue_scripts($hook) {
    if ('tools_page_permalink-search' != $hook) {
        return;
    }
    wp_enqueue_script('psp-script', plugin_dir_url(__FILE__) . 'script.js', array('jquery'), null, true);
    wp_localize_script('psp-script', 'psp_params', array(
        'ajaxurl' => admin_url('admin-ajax.php')
    ));
}


add_action('admin_enqueue_scripts', 'psp_enqueue_scripts');

function psp_ajax_handler() {
    global $wpdb;

    $permalink = $_POST['permalink'];
    $permalink = esc_url($permalink);

    $post_id = url_to_postid($permalink);

    if ($post_id) {
        wp_send_json_success(admin_url('post.php?post=' . $post_id . '&action=edit'));
    } else {
        $slug = basename($permalink);
        $path_parts = explode('/', trim(parse_url($permalink, PHP_URL_PATH), '/'));
        
        if(count($path_parts) == 1) {
            $term = get_term_by('slug', $slug, ''); 
            
            if ($term) {
                wp_send_json_success(admin_url('term.php?taxonomy=' . $term->taxonomy . '&tag_ID=' . $term->term_id));
            } else {
                wp_send_json_error("Slug simple: [$slug]. No se encontró como entrada, página, categoría ni etiqueta.");
            }
        } else {
            $parent_slug = $path_parts[count($path_parts) - 2];
            $parent_term = get_term_by('slug', $parent_slug, '');
            $term = get_term_by('slug', $slug, '');

            if($term && $parent_term) {
                $term_hierarchy = get_ancestors($term->term_id, $term->taxonomy, 'taxonomy');
                
                if(in_array($parent_term->term_id, $term_hierarchy)) {
                    wp_send_json_success(admin_url('term.php?taxonomy=' . $term->taxonomy . '&tag_ID=' . $term->term_id));
                } else {
                    wp_send_json_error("URL jerárquica: [$permalink]. La jerarquía de términos no es consistente ({$term->name} no es hijo de {$parent_term->name}).");
                }
            } else {
                wp_send_json_error("URL jerárquica: [$permalink]. No se encontró la categoría/etiqueta para los slugs [$slug] o [$parent_slug].");
            }
        }
    }

    wp_die();
}


// Función para añadir la página de herramientas
function psp_add_tools_page() {
    add_management_page(
        'Buscar por Permalink', 
        'Permalink Search', 
        'manage_options', 
        'permalink-search', 
        'psp_render_tools_page'
    );
}

// Función para renderizar la página de herramientas
function psp_render_tools_page() {
    ?>
    <div class="wrap">
        <h2>Buscar por Permalink</h2>
        <p>Introduce el Permalink de la página o entrada que quieres editar y haz clic en buscar.</p>
        <input type="text" id="psp_permalink" placeholder="Buscar por permalink">
        <button type="button" id="psp_search_button">Buscar por Permalink</button>
    </div>
    <?php
}

add_action('admin_menu', 'psp_add_tools_page');
add_action('wp_ajax_psp_search_permalink', 'psp_ajax_handler');

Contenido de script.js

Agrega el siguiente código al fichero scripts.js:

jQuery(document).ready(function($) {
    $('#psp_search_button').on('click', function() {
        var permalink = $('#psp_permalink').val();

        $.post(psp_params.ajaxurl, {
            action: 'psp_search_permalink',
            permalink: permalink
        }, function(response) {
            if (response.success) {
                window.location.href = response.data;
            } else {
                alert(response.data);
            }
        });
    });
});

Con esto, tendrás una nueva caja de búsqueda debajo de la caja de búsqueda existente en la página de listado de entradas y páginas. Cuando ingreses un permalink y hagas clic en «Buscar por Permalink», la función AJAX buscará la entrada o página correspondiente y te redireccionará a la página de edición de esa entrada o página.

Qué hace este código

  1. Un usuario inserta un permalink en la caja de texto y hace clic en «Buscar por Permalink».
  2. El archivo script.js envía este permalink al servidor mediante una solicitud AJAX.
  3. En el servidor, psp_ajax_handler busca en la base de datos de WordPress una entrada o página que coincida con el slug proporcionado y devuelve un enlace a la página de edición de esa entrada/página o un mensaje de error.
  4. script.js recibe esta respuesta, y según sea exitosa o no, redirecciona al usuario a la página de edición correspondiente o muestra un mensaje de error.

Notas sobre la versión actual

  • Funciona correctamente con entradas y posts
  • Se han encontrado bugs cuando se trata de categorías anidadas. Lo corregiré en la siguiente revisión
Daniel Pajuelo
Daniel Pajuelo es ingeniero informático y SEO Senior, actualmente trabajando en Guruwalk e impartiendo clases en BIG School (antes BIGSEO Academy). Ver más

Continua leyendo

Cómo permitir HTML en la biografía del autor en WordPress

Aquí te muestro cómo permitir HTML en las biografías de autor en WordPress, mejorando así la presentación y el SEO de los perfiles de tu sitio.
wordpress noindex resultados de busqueda

Páginas noindex aparecen en búsquedas de WordPress: Cómo arreglarlo

En esta entrada te explico como prevenir que las páginas o entradas de tu Wordpress que has marcado como noindex, y que por lo tanto no deseas que los buscadores las rastreen, no aparezcan tampoco en los resultados de búsqueda del buscador interno de Wordpress.
Botón flotante de Whatsapp sitewide

Cómo insertar un botón flotante de WhatsApp en TODO el sitio WordPress (sin plugins)

En 2 minutos te enseño a insertar un botón flotante de Whatsapp en todo tu sitio Wordpress, totalmente gratis, y sin plugins.