Cambiar el "slug" de página en la paginación

1 jul 2012, 05:34:16
Vistas: 27.7K
Votos: 17

Pregunta simple. Cuando la paginación está activada, la URL cambia a "site.com/page/2". Para mi sitio, debería ser "site.com/paggetto/2".

¿Cómo puedo cambiar esa regla de reescritura? También quiero cambiar "author" y otras variables.

Puedes usar el siguiente código en tu archivo functions.php:

// Cambiar el slug de paginación de 'page' a 'paggetto'
add_filter('init', function() {
    global $wp_rewrite;
    $wp_rewrite->pagination_base = 'paggetto';
});

// Cambiar el slug de autor de 'author' a tu preferencia
add_filter('author_rewrite_rules', function($author_rewrite) {
    $new_author_rewrite = array();
    foreach ($author_rewrite as $pattern => $substitution) {
        $pattern = str_replace('author', 'escritor', $pattern); // Cambia 'escritor' por el slug deseado
        $new_author_rewrite[$pattern] = $substitution;
    }
    return $new_author_rewrite;
});

Después de añadir este código, asegúrate de ir a Ajustes > Enlaces permanentes y hacer clic en "Guardar cambios" para que se actualicen las reglas de reescritura.

0
Todas las respuestas a la pregunta 4
1
23

Resuelto:

function re_rewrite_rules() {
    global $wp_rewrite;
    // $wp_rewrite->author_base = $author_slug;
//  print_r($wp_rewrite);
    $wp_rewrite->author_base        = 'autor';
    $wp_rewrite->search_base        = 'buscar';
    $wp_rewrite->comments_base      = 'comentarios';
    $wp_rewrite->pagination_base    = 'pagina';
    $wp_rewrite->flush_rules();
}
add_action('init', 're_rewrite_rules');

Al menos, eso hará el trabajo.

1 jul 2012 06:40:15
Comentarios

Solo un pequeño aviso, debido a lo extremadamente costoso que es $wp_rewrite->flush_rules(); en términos de rendimiento, nunca deberías usarlo en init, una opción mucho mejor es simplemente visitar la página de opciones de Enlaces permanentes, y guardar los cambios un par de veces, eso los actualizará por ti.

Andre A Andre A
24 jul 2012 14:50:34
2
20

Para algunos sitios en alemán utilizo el siguiente plugin para traducir page a seite (la palabra en alemán para page):

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Página a Seite
 * Description: Reemplaza <code>/page/</code> por <code>/seite/</code>.
 * Author:      Fuxia Scholz
 * License:     MIT
 * License URI: http://www.opensource.org/licenses/mit-license.php
 */

if ( ! function_exists( 't5_page_to_seite' ) )
{
    register_activation_hook(   __FILE__ , 't5_flush_rewrite_on_init' );
    register_deactivation_hook( __FILE__ , 't5_flush_rewrite_on_init' );
    add_action( 'init', 't5_page_to_seite' );

    function t5_page_to_seite()
    {
        $GLOBALS['wp_rewrite']->pagination_base = 'seite';
    }

    function t5_flush_rewrite_on_init()
    {
        add_action( 'init', 'flush_rewrite_rules', 11 );
    }
}

Ten en cuenta que las reglas de reescritura se vacían solo al activar/desactivar únicamente. Necesitarás una regla de reescritura separada en tu archivo .htaccess para redirigir las URLs antiguas a las nuevas:

RedirectMatch Permanent ^/(.*)/page/(.*) /$1/seite/$2
1 jul 2012 14:52:37
Comentarios

¿Cuál es la diferencia entre $GLOBALS['wp_rewrite']->pagination_base = 'seite' y $wp_rewrite->search_base = 'buscar'; ?

DarkGhostHunter DarkGhostHunter
2 jul 2012 00:05:51

Existen diferencias sutiles y poco intuitivas entre global $var; y $GLOBALS['var']. No importa en este caso, solo ten en cuenta que la última forma es más confiable y más fácil de leer/entender.

fuxia fuxia
2 jul 2012 00:09:47
0

Esta función trabajará directamente con tu paquete de traducción, formateando tu nueva base y evitará que se ejecute más de una vez la función flush_rewrite_rules, previniendo un mal rendimiento en tu blog.

function my_change_rewrite_base() {
    global $wp_rewrite;
    $bases = array(
        'author_base' => __('Autor'), 
        'search_base' => __('Buscar'), 
        'comments_base' => __('Comentarios'), 
        'pagination_base' => __('Página')
    );

    foreach ($bases AS $key => $base) {
        $wp_rewrite->{$key} = remove_accents(mb_strtolower($base));
    }

    if ( ! get_option('my_change_rewrite_base_flushed', false) ) {
        flush_rewrite_rules();
        update_option( 'my_change_rewrite_base_flushed', time());
    }
}
add_action('init', 'my_change_rewrite_base');
14 feb 2019 02:29:59
3

Lo siguiente funcionó para mí:

function nw_strana() {
    $GLOBALS['wp_rewrite']->pagination_base = 'strana';
}

add_action( 'init', 'nw_strana' );

function nw_rewrite( $rules ) {
    $new_rules = array(
        'obchod/strana/([0-9]{1,})/?$' => 'index.php?post_type=product&paged=$matches[1]',
    );

    $rules = array_merge( $new_rules, $rules );

    return $rules;
}

add_filter( 'rewrite_rules_array', 'nw_rewrite' );
2 mar 2019 11:11:01
Comentarios

¿Alguna idea para eliminar "page" del slug en la paginación? Por defecto es midominio/page/2. Quiero que sea midominio/1 ¡Gracias de antemano!

Jornes Jornes
7 ene 2023 17:19:42

No recomendaría hacer eso @Jornes, podría causar mucha confusión con las entradas/páginas que tampoco usan un prefijo (slug).

Beee Beee
29 mar 2023 13:47:14

@Beee Sí. Tiene sentido. Ahora simplemente lo dejaré como está.

Jornes Jornes
27 jun 2023 12:22:22