Cambiare lo slug "page" nella paginazione
Domanda semplice. Quando la paginazione è attivata, l'URL cambia in "site.com/page/2"
. Per il mio sito, dovrebbe essere "site.com/paggetto/2"
.
Come posso modificare quella regola di riscrittura? Vorrei anche modificare "author"
e altre variabili.

Risolto:
function re_rewrite_rules() {
global $wp_rewrite;
// $wp_rewrite->author_base = $author_slug;
// print_r($wp_rewrite);
$wp_rewrite->author_base = 'autore';
$wp_rewrite->search_base = 'cerca';
$wp_rewrite->comments_base = 'commenti';
$wp_rewrite->pagination_base = 'pagina';
$wp_rewrite->flush_rules();
}
add_action('init', 're_rewrite_rules');
Almeno, questo farà il lavoro.

Solo un piccolo avviso, dato quanto estremamente costoso $wp_rewrite->flush_rules();
è in termini di prestazioni, non dovresti mai usarlo su init
, un'opzione molto migliore è semplicemente visitare la pagina delle opzioni dei Permalink e salvare le modifiche un paio di volte, questo li aggiornerà per te.

Per alcuni siti in tedesco utilizzo il seguente plugin per tradurre page
in seite
(la parola tedesca per page
):
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: T5 Page to Seite
* Description: Sostituisce <code>/page/</code> con <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 );
}
}
Nota che le regole di riscrittura vengono svuotate solo durante l'attivazione/disattivazione soltanto. Avrai bisogno di una regola di riscrittura separata nel tuo file .htaccess
per reindirizzare i vecchi URL ai nuovi:
RedirectMatch Permanent ^/(.*)/page/(.*) /$1/seite/$2

Qual è la differenza tra $GLOBALS['wp_rewrite']->pagination_base = 'seite' e $wp_rewrite->search_base = 'buscar'; ?

Ci sono differenze sottili e non intuitive tra global $var;
e $GLOBALS['var']
. Non importa in questo caso, ma tieni presente che la seconda forma è più affidabile e più facile da leggere/capire.

Questa funzione lavorerà direttamente con il tuo pacchetto di traduzione, formattando la nuova base e impedendo l'esecuzione multipla della funzione flush_rewrite_rules evitando così un calo delle prestazioni del tuo blog.
function my_change_rewrite_base() {
global $wp_rewrite;
$bases = array(
'author_base' => __('Autore'),
'search_base' => __('Cerca'),
'comments_base' => __('Commenti'),
'pagination_base' => __('Pagina')
);
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');

Il seguente codice ha funzionato per me:
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' );

Qualche idea per rimuovere "page" dallo slug per la paginazione? Di default mydomain/page/2. Vorrei che fosse mydomain/1 Grazie in anticipo!

Non lo consiglierei @Jornes, creerebbe troppa confusione con post/pagine che non usano un prefisso (slug).
