Cách đặt cấu trúc permalink thông qua hàm.php


10

Tôi đang thiết lập Mạng Wordpress và muốn tất cả các trang web mới có cùng cấu trúc permalink (nghĩa là "/% năm% /% thángnum% /% postname% /"). Tôi tự hỏi nếu điều này có thể thực hiện thông qua hook hoặc hack trong hàm.php, mà không cần phải dựa vào người dùng để chọn cấu trúc đó.

Câu trả lời:


15

Bạn có thể đặt cấu trúc permalink bằng cách gọi set_permalink_structure()phương thức của $wp_rewriteđối tượng toàn cục .

add_action( 'init', function() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
} );

Đây là phiên bản PHP <5.3 của mã trong trường hợp bạn gặp lỗi.

function reset_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
}
add_action( 'init', 'reset_permalinks' );

Sao chép và dán mã của bạn tạo ra một lỗi, nhưng lý do căn bản là mẹo! Tôi chỉ tự hỏi liệu câu hỏi / ý định của tôi có phải là thực hành tốt hay không, mặc dù ...
Tomas Buteler

1
Tomas, cảm ơn vì đã chấp nhận câu trả lời. Vui mừng khi được giúp đỡ. Đối với các thực tiễn tốt - tôi nghĩ rằng nếu mục tiêu của bạn là thực thi và khóa cấu trúc permalink như vậy trên các trang web - thì điều đó là hợp lý; và bằng 'khóa' Tôi có nghĩa là mã sẽ không cho phép bất kỳ thay đổi nào đối với cấu trúc thông qua Quản trị viên, nếu điều đó tốt thì tôi cho rằng việc này hoàn toàn ổn.
soulseekah

1
Nó hoạt động nhưng nó gây ra xung đột khi quản trị viên lưu từ trang permalink (404 trên bài đăng). Sau đó, khi trang web tải (Proccess init hook), cấu trúc permalink lại thay đổi (404 trên các bài đăng một lần nữa). sử dụng $wp_rewrite->flush_rules();giải quyết vấn đề. Thực hành xấu để sử dụng nó trên init và chạy nó mọi lúc. Chỉ cần truy cập trang permalinks sẽ làm các thủ thuật.
Sisir

1
Toàn bộ ý định là vô hiệu hóa trang tùy chọn permalinks, vì vậy có lẽ tôi có thể thoát khỏi nó?
Tomas Buteler

3
Nó nên được gọi là 'after_switch_theme' hoặc kích hoạt plugin và được theo sau bởi 'flush_rewrite_rules ()'
csstd

2

Trả lời trước không hoạt động. Tôi đã nhận được một giải pháp tinh khiết. Có thể sử dụng Sử dụng mã này. Nó sẽ hoạt động 100%. Cảm ơn

/**
 * Rewrite set up, when theme activate i mean
 */
if (isset($_GET['activated']) && is_admin()) {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}

/**
* Redirect to Permalink setting Page.
* Otherwise Redirect rule will not work Properly.
*/
function redirect_to_permalink() {

    wp_redirect('options-permalink.php');
}
add_action( 'after_switch_theme', 'redirect_to_permalink' );

0
function setPermaLink(){
    $ps = '/%category%/%postname%/';
    $permalink_structure = sanitize_option( 'permalink_structure', $ps);
    $blog_prefix = '/blog';
    $prefix = '/index.php';

    if ( ! empty( $permalink_structure ) ) {
        $permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) );
        if ( $prefix && $blog_prefix ) {
            $permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure );
        } else {
            $permalink_structure = $blog_prefix . $permalink_structure;
        }
    }

    $wp_rewrite->set_permalink_structure( $permalink_structure );
    flush_rewrite_rules();
}

setPermaLink();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.