เปลี่ยน "หน้า" กระสุนในการแบ่งหน้า


13

คำถามง่าย ๆ เมื่อเลขถูกเปิดใช้งาน URL "site.com/page/2"ที่เปลี่ยนแปลงไป "site.com/paggetto/2"สำหรับเว็บไซต์ของฉันนี้ควรจะเป็น

ฉันจะเปลี่ยนกฎการเขียนซ้ำได้อย่างไร ฉันต้องการเปลี่ยนแปลง"author"และตัวแปรอื่น ๆ

คำตอบ:


17

สำหรับบางเว็บไซต์ในภาษาเยอรมันฉันใช้ปลั๊กอินต่อไปนี้เพื่อแปลpageเป็นseite(คำภาษาเยอรมันสำหรับpage):

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

โปรดทราบว่าคุณล้างกฎการเขียนซ้ำในการ de / เปิดใช้งานเท่านั้น คุณจะต้องมีกฎการเขียนซ้ำแยกต่างหาก.htaccessเพื่อเปลี่ยนเส้นทาง URL เก่าไปยังกฎใหม่:

RedirectMatch Permanent ^/(.*)/page/(.*) /$1/seite/$2

1
ความแตกต่างระหว่าง $ GLOBALS ['wp_rewrite'] -> pagination_base = 'seite' และ $ wp_rewrite-> search_base = 'buscar'; ?
DarkGhostHunter

1
มีที่ลึกซึ้งและ unintuitive มีความแตกต่างระหว่างและglobal $var; $GLOBALS['var']ไม่สำคัญในกรณีนี้โปรดจำไว้ว่าแบบฟอร์มหลังมีความน่าเชื่อถือมากกว่าและง่ายต่อการอ่าน / ทำความเข้าใจ
fuxia

18

นึกออก, คิดออก, หาคำตอบได้:

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

อย่างน้อยก็จะทำงาน


11
ข้อสังเกตเล็ก ๆ น้อย ๆ เพียงประการเดียวเนื่องจากการใช้งาน$wp_rewrite->flush_rules();มีราคาแพงมากคุณจึงไม่ควรใช้initตัวเลือกที่ดีกว่าคือการไปที่หน้าตัวเลือกลิงก์ถาวรและบันทึกการเปลี่ยนแปลงสองสามครั้ง .
อังเดร

1

ฟังก์ชั่นนี้จะทำงานโดยตรงกับแพ็คเกจแปลของคุณจัดรูปแบบฐานใหม่ของคุณและป้องกันไม่ให้ทำงานมากกว่าหนึ่งครั้งฟังก์ชั่น flush_rewrite_rules หลีกเลี่ยงประสิทธิภาพที่ไม่ดีของบล็อกของคุณ

function my_change_rewrite_base() {
    global $wp_rewrite;
    $bases = array(
        'author' => __('Author'), 
        'search' => __('Search'), 
        'comments' => __('Comments)', 
        'pagination' => __('Page')
    );

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

0

การทำงานต่อไปนี้สำหรับฉัน:

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' );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.