Lưu ý: đây là một câu trả lời không đầy đủ sẽ được mở rộng theo từng bước
Cách đáng tin cậy duy nhất để xóa các quy tắc viết lại trong multisite, mà không có khả năng phá hủy cấu trúc permalink của chính và bất kỳ bối cảnh blog nào khác (tùy thuộc vào cách thức và cách bạn chuyển sang và từ) là xóa các quy tắc viết lại trong ngữ cảnh cụ thể như vậy :
global $wp_rewrite;
$wp_rewrite->init(); //important...
$wp_rewrite->flush_rules();
Ở trên đảm bảo rằng cấu trúc permalink chính xác cho bối cảnh cụ thể được lấy ra và được đặt trước khi xây dựng các quy tắc viết lại và cam kết các thay đổi đối với cơ sở dữ liệu.
Điều này không áp dụng cho một trang web nơi bối cảnh không quan trọng, vì chỉ có một bối cảnh.
flush_rewrite_rules()
theo ý kiến của tôi là thiếu sót trong tiền đề rằng nó giả định bối cảnh chính xác, nhưng không tính đến việc chúng ta sử dụng switch_to_blog
để thay đổi hoàn toàn bối cảnh và khiến chúng ta rơi vào lãnh thổ nguy hiểm nếu chúng ta cố gắng tuôn ra các quy tắc.
Đây là những gì bên trong của flush_rewrite_rules()
trông giống như:
function flush_rewrite_rules( $hard = true ) {
global $wp_rewrite;
$wp_rewrite->flush_rules( $hard );
}
Tôi không thể nghĩ ra lý do tại sao nó không giống như thế này:
function flush_rewrite_rules( $hard = true ) {
global $wp_rewrite;
$wp_rewrite->init(); //hello....
$wp_rewrite->flush_rules( $hard );
}
... Đặc biệt là khi bạn xem xét rằng các nhà xây dựng của WP_Rewrite
những gì? Nó làm điều này ...
public function __construct() {
$this->init();
}
Chạm vào điểm quan tâm đầu tiên của bạn để tiếp tục dòng này, mặc dù,
Vì vậy, làm thế nào plugin sẽ đi về quy tắc viết lại đáng tin cậy trong multisite :
- Khi trang web mới được tạo ra, cho trang web?
Chúng ta hãy xem những gì cốt lõi WordPress sẽ gọi đáng chú ý trong quá trình này:
- Đầu tiên
wpmu_create_blog()
- mà sau đó gọi
install_blog()
mà lần lượt gọipopulate_options()
- sau đó
populate_options()
đặt cấu trúc permalink mặc định trong bảng tùy chọn
- sau khi
install_blog()
chạy, wp_install_defaults()
rồi được gọi
- sau đó
wp_install_defaults()
xóa các quy tắc viết lại cho trang web mới được tạo trước khi chuyển trở lại blog hiện tại thông qua restore_current_blog()
.
Điều quan trọng cần lưu ý là wp_install_defaults()
xóa các quy tắc chính xác như tôi đã đề xuất ở trên:
$wp_rewrite->init();
$wp_rewrite->flush_rules();
... bởi vì đó là cách duy nhất để đảm bảo chính xác permalink_structure
và các quy tắc được xây dựng cho bối cảnh hiện tại.
Cũng trong vấn đề được chứng minh trong vấn đề Github , lý do tại sao người dùng gặp phải hành vi sau:
Khi một trang web mới được tạo, nó chỉ phá vỡ các permalinks cấp độ bài đăng trên trang web cấp cao nhất - trong hầu hết các cấu hình permalink nhưng không phải tất cả:
2 định dạng này hoạt động chính xác.
Mặc định - Hoạt động như mong đợi
Ngày & Tên - Hoạt động như mong đợi
... là bởi vì nếu blog chính có cấu trúc permalink Day & Name /%year%/%monthnum%/%day%/%postname%/
, khi một trang web mới được tạo, thì nó cũng có cấu trúc permalink Day & Name /%year%/%monthnum%/%day%/%postname%/
theo mặc định, đó là lý do tại sao không có vấn đề đáng chú ý nào xuất hiện khi plugin Yoast SEO viết lại quy tắc trên shutdown
móc.