Schimbă slug-ul "page" în paginare

1 iul. 2012, 05:34:16
Vizualizări: 27.7K
Voturi: 17

Întrebare simplă. Când paginarea este activată, URL-ul se schimbă în "site.com/page/2". Pentru site-ul meu, acesta ar trebui să fie "site.com/paggetto/2".

Cum pot schimba acea regulă de rescriere? De asemenea, vreau să schimb și "author" și alte variabile.

0
Toate răspunsurile la întrebare 4
1
23

Am rezolvat:

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        = 'cautare';
    $wp_rewrite->comments_base      = 'comentarii';
    $wp_rewrite->pagination_base    = 'pagina';
    $wp_rewrite->flush_rules();
}
add_action('init', 're_rewrite_rules');

Măcar asta va face treaba.

1 iul. 2012 06:40:15
Comentarii

Doar o mică observație, din cauza costului extrem de ridicat din punct de vedere al performanței al $wp_rewrite->flush_rules();, nu ar trebui să îl folosiți niciodată pe init, o opțiune mult mai bună este să vizitați pagina de opțiuni Permalink și să salvați modificările de câteva ori, acest lucru va regenera regulile pentru dumneavoastră.

Andre A Andre A
24 iul. 2012 14:50:34
2
20

Pentru unele site-uri în germană, folosesc următorul plugin pentru a traduce page în seite (cuvântul german pentru page):

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Page to Seite
 * Description: Înlocuiește <code>/page/</code> cu <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 );
    }
}

Rețineți că resetarea regulilor de rescriere se face doar la activare/dezactivare numai. Veți avea nevoie de o regulă separată de rescriere în fișierul .htaccess pentru a redirecționa URL-urile vechi către cele noi:

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

Care este diferența dintre $GLOBALS['wp_rewrite']->pagination_base = 'seite' și $wp_rewrite->search_base = 'buscar'; ?

DarkGhostHunter DarkGhostHunter
2 iul. 2012 00:05:51

Există diferențe subtile și neintuitive între global $var; și $GLOBALS['var']. Nu contează în acest caz, doar ține minte că ultima formă este mai fiabilă și mai ușor de citit/înțeles.

fuxia fuxia
2 iul. 2012 00:09:47
0

Această funcție va lucra direct cu pachetul tău de traducere, formatând noua bază și va preveni rularea de mai multe ori a funcției flush_rewrite_rules, evitând astfel o performanță slabă a blogului tău.

function my_change_rewrite_base() {
    global $wp_rewrite;
    $bases = array(
        'author_base' => __('Autor'), 
        'search_base' => __('Căutare'), 
        'comments_base' => __('Comentarii'), 
        'pagination_base' => __('Pagină')
    );

    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

Următoarea soluție a funcționat pentru mine:

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' );

Acest cod schimbă URL-ul de paginare implicit din WordPress pentru posturile de tip "product" (produs).

  • nw_strana() - Schimbă baza de paginare din "page" în "strana"
  • nw_rewrite() - Adaugă o nouă regulă de rescriere pentru URL-urile de tip "obchod/strana/2/"
  • Se folosește filtrul rewrite_rules_array pentru a modifica regulile de rescriere
  • Acțiunea este legată de hook-ul init pentru a se executa la momentul potrivit
2 mar. 2019 11:11:01
Comentarii

Ai vreo idee cum să înlătur „page” din slug-ul pentru paginare? Implicit este mydomain/page/2. Aș vrea să fie mydomain/1 Mulțumesc anticipat!

Jornes Jornes
7 ian. 2023 17:19:42

Nu aș recomanda să faci asta @Jornes, ar crea prea multă confuzie cu articolele/paginile care nici ele nu folosesc un prefix (slug).

Beee Beee
29 mar. 2023 13:47:14

@Beee Da. Are logică. Acum, am decis să las așa cum este.

Jornes Jornes
27 iun. 2023 12:22:22