Obtener todas las URLs de los contenidos de nuestro WordPress

De cara a una migración del contenido de un blog a otro, y por consiguiente de tener que incluir en el fichero .htaccess del primer blog un buen puñado de redirecciones 301, me he encontrado con la necesidad de obtener el listado de URLs de todas las entradas y páginas de una instalación de WordPress.

Seguramente habrá algún plugin u otro método más sencillo para hacerlo, pero al final he tirado de un sencillo script publicado en stackoverflow con alguna pequeña modificación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
$parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );
 
$posts = new WP_Query('post_type=any&posts_per_page=-1&post_status=publish');
$posts = $posts->posts;
 
header('Content-Type: text/plain; charset=utf-8');
$post_id = 0;
foreach($posts as $post) {
    switch ($post->post_type) {
        case 'revision':
        case 'nav_menu_item':
            break;
        case 'page':
            $permalink = get_page_link($post->ID);
            break;
        case 'post':
            $permalink = get_permalink($post->ID);
            break;
        case 'attachment':
            $permalink = get_attachment_link($post->ID);
            break;
        default:
            $permalink = get_post_permalink($post->ID);
            break;
    }
    $post_id++;
    echo "n{$post_id}t{$post->post_type}t{$permalink}t{$post->post_title}";
}
?>

De esta forma obtenemos una línea por cada post o página del blog que incluye número, tipo, URL y título del contenido. En caso de que solamente necesitamos las URLs deberemos modificar la línea 29 del anterior código por la siguiente:

    echo "n{$permalink}";

Este código debemos guardarlo como fichero php en la carpeta wp-content y a continuación ejecutarlo vía web. En el caso de este blog, si tuviera el script público, se accedería desde http://almirot.com/wp-content/generar_urls.php

13 comentarios en “Obtener todas las URLs de los contenidos de nuestro WordPress

  1. Johnnie

    Hola Alberto.

    Me ha servido de gran ayuda el script, sin embargo, quisiera saber cómo añadir también al resultado la URL de la imagen destacada en cada uno de los post.

    Te agradecería la ayuda. ¡Saludos!

    Responder
  2. pablo

    Buenas tardes,

    Acabo de encontrar este post y la verdad que me ha sido de mucha ayuda.

    Quisiera añadir las URLs de los videos, imágenes y categorías de cada uno de los post, espero que me puedas ayudar.

    Un saludo y muchas gracias por este gran post

    Responder
  3. Iñaki

    Genial, justo estoy en proceso de cambiar los permanent links de mi wordpress y no sabía cómo sacar el listado de todos los posts para hacer las redirecciones 301.

    Graciasssssss!

    Responder
  4. Saraº

    Hola,

    Este artículo es justo lo que estaba buscando, ya que ando clonando mis webs y los enlaces están siendo un quebradero de cabeza.
    Sin embargo, dada mi inexperiencia en el mundo php y aunque he seguido tus instrucciones, al ejecutar el script no he conseguido una línea por cada post, sino un fichero infumable con toas las lineas seguidas sin tabulación. ¿Serías tan amable de escribirme un privado y echarme una mano?

    Responder
  5. Jose

    A la pregunta de Sara de que los post aparecen seguidos sin tabulación sólo deben REEMPLAZAR la linea de código donde sale echo así:
    echo «{$permalink}t{$post->post_type}t{$permalink}t{$post->post_title}\n»;

    Responder

Deja una respuesta

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