Cambiar permalink solo en nuevas publicaciones

2

¿Es posible cambiar los enlaces permanentes en todas las publicaciones creadas después de una fecha determinada? Esto porque no queremos que las URL antiguas se rompan.

Ahora tenemos /%year%/%month%/%postname% Queremos tener /%postname

    
pregunta Philip 12.06.2015 - 12:04

4 respuestas

6

Su estructura de enlace permanente es global; No es propiedad de publicaciones individuales. No hay forma de indicar que una publicación usa una cierta estructura de enlace permanente mientras que otra usa una diferente.

Esto tiene sentido cuando piensas en cómo WordPress procesa las solicitudes. Usando la nueva estructura, WordPress asigna la solicitud a index.php?name=$1 , donde $1 es la parte de la solicitud posterior. WordPress luego consulta la base de datos para una publicación con un slug que coincida con la solicitud.

Si cada publicación tuviera su propia estructura de enlace permanente, WordPress tendría que iterar sobre cada publicación individual hasta encontrar una con una estructura de enlace permanente que coincidiera con la solicitud.

Lo que puedes hacer es redirigir tus enlaces permanentes antiguos a los enlaces permanentes nuevos. Hay un par de maneras en que puedes hacer esto:

.htaccess

Puedes agregar lo siguiente a tu archivo .htaccess , antes de que las reglas de reescritura de WordPress:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^[0-9]{4}/[0-9]{2}/(.*)$ /$1 [R=301,L]
</IfModule>

Esto coincidirá con la estructura year/month/postname y redirigirá a la estructura postname .

add_rewrite_rule

Puedes usar add_rewrite_rule para crear una regla adicional que coincida con tu antigua estructura de enlace permanente.

add_action('init', function() {
    flush_rewrite_rules();
    add_rewrite_rule('^([0-9]{4})/([0-9]{2})/(.*)$', 'index.php?name=$matches[3]', 'bottom');
});

Esto logra lo mismo que el método .htaccess . Si utiliza este enfoque, asegúrese de vaciar sus reglas de reescritura visitando la página Settings > Permalinks en su backend.

Independientemente del enfoque que utilice, la URL canónica para sus publicaciones usará la nueva estructura de enlace permanente. Las solicitudes que usen la antigua estructura de enlace permanente se redirigirán a la nueva estructura.

Los motores de búsqueda finalmente captarán el cambio e indexarán la nueva estructura en lugar de la antigua. En ese momento, puede eliminar las reglas de reescritura adicionales, siempre y cuando no tenga ningún enlace interno utilizando la estructura antigua .

Si tiene enlaces internos que utilizan la estructura anterior, usaría esta utilidad para hacer una búsqueda regex y reemplazar. Solo asegúrate de hacer una copia de seguridad de tu base de datos.

Si le preocupan los enlaces entrantes que usan la estructura anterior, no hay mucho que pueda hacer aparte de mantener las reglas de reescritura indefinidamente.

    
respondido por el Mathew Tinsley 14.06.2015 - 18:27
0

Dependiendo de cuántas páginas represente (las antiguas), podría considerar crear una regla de reescritura para cada página con un indicador de redireccionamiento permanente.

Si esta no es una opción, creo que la respuesta de mtinsley es tu mejor apuesta.

    
respondido por el Julien B. 18.06.2015 - 03:08
0

Es posible que el complemento Redirección sea interesante.

Debería permitirte cambiar la estructura del enlace permanente mientras se mantienen las URL antiguas válidas.

    
respondido por el zaantar 21.06.2015 - 16:42
-1

Puede crear un nuevo tipo de publicación, bajo el nombre "publicación" y luego agregar una barra de reescritura. Esto sobrescribirá el tipo de publicación de Wordpres predeterminado.

Aquí hay un código de ejemplo:

add_action( 'init', 'my_new_default_post_type', 1 );
function my_new_default_post_type() {

    register_post_type( 'post', array(
        'labels' => array(
            'name_admin_bar' => _x( 'Post', 'add new on admin bar' ),
        ),
        'public'  => true,
        '_builtin' => false, 
        '_edit_link' => 'post.php?post=%d', 
        'capability_type' => 'post',
        'map_meta_cap' => true,
        'hierarchical' => false,
        'rewrite' => array( 'slug' => 'post' ),
        'query_var' => false,
        'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats' ),
    ) );
}

Esto no está probado, pero puedes intentarlo. Es mejor que cambiar la configuración de URL en htaccess, ya que se aplicará a todas las publicaciones y páginas.

    
respondido por el Bruno Monteiro 12.06.2015 - 22:59

Lea otras preguntas en las etiquetas