Изменение части URL "page" в пагинации

1 июл. 2012 г., 05:34:16
Просмотры: 27.7K
Голосов: 17

Простой вопрос. Когда активируется пагинация, URL меняется на "site.com/page/2". Для моего сайта это должно быть "site.com/paggetto/2".

Как я могу изменить это правило перезаписи? Я также хочу изменить "author" и другие переменные.

// Добавьте этот код в functions.php function change_pagination_base() { global $wp_rewrite; $wp_rewrite->pagination_base = 'paggetto'; // Изменить 'page' на 'paggetto' $wp_rewrite->author_base = 'writer'; // Изменить 'author' на 'writer' // Другие переменные можно изменить аналогично $wp_rewrite->flush_rules(); // Обновить правила перезаписи } add_action('init', 'change_pagination_base');
0
Все ответы на вопрос 4
1
23

Разобрался:

function re_rewrite_rules() {
    global $wp_rewrite;
    // $wp_rewrite->author_base = $author_slug;
//  print_r($wp_rewrite);
    $wp_rewrite->author_base        = 'автор';
    $wp_rewrite->search_base        = 'поиск';
    $wp_rewrite->comments_base      = 'комментарии';
    $wp_rewrite->pagination_base    = 'страница';
    $wp_rewrite->flush_rules();
}
add_action('init', 're_rewrite_rules');

По крайней мере, это сработает.

1 июл. 2012 г. 06:40:15
Комментарии

Просто небольшое замечание: поскольку $wp_rewrite->flush_rules(); крайне ресурсоемкая операция с точки зрения производительности, никогда не следует использовать её на хуке init. Гораздо лучший вариант — просто зайти на страницу настроек постоянных ссылок и несколько раз сохранить изменения, это автоматически сбросит правила для вас.

Andre A Andre A
24 июл. 2012 г. 14:50:34
2
20

Для некоторых сайтов на немецком языке я использую следующий плагин для перевода page в seite (немецкое слово для page):

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Page to Seite
 * Description: Заменяет <code>/page/</code> на <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 );
    }
}

Обратите внимание, что вы сбрасываете правила перезаписи только при активации/деактивации. Вам понадобится отдельное правило перезаписи в вашем .htaccess для перенаправления старых URL на новые:

RedirectMatch Permanent ^/(.*)/page/(.*) /$1/seite/$2
1 июл. 2012 г. 14:52:37
Комментарии

В чём разница между $GLOBALS['wp_rewrite']->pagination_base = 'seite' и $wp_rewrite->search_base = 'buscar'; ?

DarkGhostHunter DarkGhostHunter
2 июл. 2012 г. 00:05:51

Существуют тонкие и неочевидные различия между global $var; и $GLOBALS['var']. В данном случае это не имеет значения, просто имейте в виду, что вторая форма более надежна и легче читается/понимается.

fuxia fuxia
2 июл. 2012 г. 00:09:47
0

Эта функция будет работать напрямую с вашим пакетом перевода, форматировать новую базу и предотвращать многократный вызов функции flush_rewrite_rules, что позволяет избежать снижения производительности вашего блога.

function my_change_rewrite_base() {
    global $wp_rewrite;
    $bases = array(
        'author_base' => __('Автор'), 
        'search_base' => __('Поиск'), 
        'comments_base' => __('Комментарии'), 
        'pagination_base' => __('Страница')
    );

    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 февр. 2019 г. 02:29:59
3

Следующий код сработал для меня:

function nw_strana() {
    // Изменяем базовое название для пагинации на 'strana' (страница)
    $GLOBALS['wp_rewrite']->pagination_base = 'strana';
}

// Добавляем действие при инициализации WordPress
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;
}

// Добавляем фильтр для изменения правил перезаписи URL
add_filter( 'rewrite_rules_array', 'nw_rewrite' );
2 мар. 2019 г. 11:11:01
Комментарии

Есть идеи, как убрать "page" из слага для пагинации? По умолчанию mydomain/page/2. Хочу, чтобы было mydomain/1 Заранее спасибо!

Jornes Jornes
7 янв. 2023 г. 17:19:42

Я бы не рекомендовал так делать @Jornes, это вызовет слишком много путаницы с постами/страницами, которые также не используют префикс (слаг).

Beee Beee
29 мар. 2023 г. 13:47:14

@Beee Да. Это логично. Теперь я оставлю всё как есть.

Jornes Jornes
27 июн. 2023 г. 12:22:22