API cài đặt trong Multisite - Thiếu thông báo cập nhật


8

Khi tôi sử dụng API cài đặt trong cài đặt nhiều trang và trang tùy chọn nằm ở cấp độ mạng, đăng các tùy chọn options.phpkhông hoạt động, vì trang quản trị nằm ở đó wp-admin/networkvà WP hy vọng trang sẽ ở đó wp-admin.

Tôi đã thêm một chức năng kiểm tra xem cài đặt WP này có phải là cài đặt multsite (thông qua hằng số không) và nếu có, nó sẽ thay đổi giá trị hành động của biểu mẫu thành ../option.php. Điều này sẽ lưu các tùy chọn OK, nhưng thông báo mặc định "Đã lưu cài đặt". bị thiếu (tuy nhiên, chuỗi truy vấn không bao gồm settings-updated=true).

Bất kỳ suy nghĩ về làm thế nào để có được thông báo xuất hiện?

Câu trả lời:


11

Đối với các trang tùy chọn mạng, URL hành động biểu mẫu chính xác là:

wp-admin/network/edit.php?action=your_option_name

Sau đó, bạn phải đăng ký một cuộc gọi lại:

add_action( 
    'network_admin_edit_your_option_name', 
    'your_save_network_options_function' 
);

Trong chức năng gọi lại đó kiểm tra $_POSTdữ liệu, chuẩn bị các giá trị, sau đó lưu chúng:

update_site_option( $this->option_name, $this->option_values );

Và sau đó bạn phải tạo chuyển hướng mà không cần trợ giúp thêm:

// redirect to settings page in network
wp_redirect(
    add_query_arg(
        array( 'page' => 'your_options_page_slug', 'updated' => 'true' ),
        (is_multisite() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' ))
    )
);
exit;

Trên trang tùy chọn kiểm tra $_GET['updated']và thêm thông báo quản trị nếu bạn tìm thấy tham số đó.


Vì vậy, API Cài đặt không khả dụng trên các trang quản trị mạng? Và những gì @NightHawk ban đầu đã làm, thực sự là lưu các tùy chọn vào blog chính của mạng và không lưu chúng trên toàn bộ trang web, phải không?
Parham

@Parham Tôi chưa thấy mã của anh ấy, nhưng tôi biết hầu hết các phần của API Cài đặt đều không có sẵn trên các trang mạng hoặc chúng hoạt động theo những cách lạ. Không cần phải sử dụng nó.
fuxia

0

Tôi đã sử dụng câu trả lời của @ toscho rất hiệu quả, tuy nhiên trong một số đường dẫn cài đặt wordpress nhất định, URL hành động dạng mã hóa cứng sẽ không hoạt động. Ở đây @birgire nêu cách xây dựng URL chính xác :

Khi đề cập đến các url trong quản trị mạng, bạn nên xem xét mạng_admin_url (). chức năng cốt lõi, quay trở lại admin_url () cho các thiết lập không đa trang.

echo esc_url( 
    add_query_arg( 
       'action', 
       'your_option_name', 
       network_admin_url( 'edit.php' ) 
    )
);
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.