Изменение части URL "page" в пагинации
Простой вопрос. Когда активируется пагинация, 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');

Разобрался:
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');
По крайней мере, это сработает.

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

Для некоторых сайтов на немецком языке я использую следующий плагин для перевода 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

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

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

Эта функция будет работать напрямую с вашим пакетом перевода, форматировать новую базу и предотвращать многократный вызов функции 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');

Следующий код сработал для меня:
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' );

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

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