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.
Andre A
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'; ?
DarkGhostHunter
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.
fuxia
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!
Jornes
Non lo consiglierei @Jornes, creerebbe troppa confusione con post/pagine che non usano un prefisso (slug).
Beee