Làm cách nào để triển khai add_sinstall_error trên các trang menu tùy chỉnh?


8

Sách Phát triển Plugin WordPress chuyên nghiệp giải thích chi tiết cách sử dụng API Cài đặt đúng cách và nó cũng trình bày cách thêm Menu và Menu phụ, nhưng thật không may, nó không cung cấp bất kỳ ví dụ nào về điều này. Trong khi tôi đã quản lý để làm cho hầu hết nó hoạt động, tôi không thể tìm ra cách triển khai add_sinstall_error đúng cách trên các trang Menu tùy chỉnh. Đây là mã của tôi:

function settings_main_validate( $input ) {
$valid['text_string'] = preg_replace( '/[^a-zA-Z]/', '', $input['text_string'] );

if ( $valid['text_string'] != $input['text_string'] ) {
    //add_setting_error: $title, $id, $error_message, $class
    add_settings_error( 'fields_main_input', 'texterror', 'Incorrect value entered!', 'error' );
}   

return $valid;
}                  

Xác thực ở trên sẽ hoạt động tốt trên cài đặt được hiển thị bằng cách sử dụng add_options_page, nhưng sẽ không hiển thị các lỗi cài đặt trên các trang được hiển thị cùng add_menu_page.

Câu trả lời:


8

Có một số thành phần để tạo lỗi / thông báo quá trình tạo và hiển thị:

  1. add_settings_error()gọi để thêm mục vào ngăn xếp ( $wp_settings_errorsbiến toàn cục).
  2. settings_errors tạm thời giữ các lỗi để chúng tồn tại di chuyển từ trang này sang trang khác.
  3. settings_errors()Chức năng get_settings_errors()truy xuất lỗi từ bộ nhớ hoặc thoáng qua và sau đó hiển thị chúng.

Chúng hoạt động như một bùa mê cho API cài đặt, nhưng tiếc là chúng không được thiết lập để sử dụng chung. Mặt khác, nó là tầm thường để làm việc xung quanh đó.

Hook settings_errors()để admin_noticestrên trang của plugin của bạn, vượt qua mã lỗi với nó vì vậy nó chỉ cho thấy công cụ của bạn.

Lưu thủ công các lỗi để settings_errorsthoáng qua (chỉ cần nhét biến toàn cục vào đó).

get_settings_errors()mong đợi gợi ý trong các tham số GET ( $_GET['settings-updated']) nên kiểm tra tạm thời thay vì bộ nhớ, bạn có thể cung cấp hoặc nhận lỗi từ tạm thời và lưu chúng trở lại biến toàn cục trước settings_errors()cuộc gọi của bạn .

Cập nhật

Bạn đang biến điều này thành một mớ hỗn độn với nhiều câu hỏi, vì vậy tôi sẽ cố gắng giải quyết mối quan tâm của bạn ở đây.

API cài đặt làm việc với các trang admin, mà không sử dụng phần Cài đặt làm cơ sở. Vấn đề thực sự của bạn là trong trường hợp đó báo cáo lỗi / thông báo không hoạt động.

Đầu tiên, đây là những gì xảy ra khi bạn đăng mẫu, thiết lập với API Cài đặt:

  1. Dữ liệu được đăng lên options.phptrang đặc biệt .
  2. Có dữ liệu được khử trùng / xác nhận bằng cách sử dụng gọi lại.
  3. Bất kỳ lỗi / thông báo nào xuất hiện trong quá trình vệ sinh / xác nhận được thu thập và lưu lại tạm thời.
  4. Bạn được chuyển hướng trở lại bất cứ nơi nào bạn đến .

Bây giờ khi bạn tải trang quản trị, nó sẽ kiểm tra xem trang này có thuộc phần Cài đặt hay không và nếu trường hợp đó bao gồm options-head.phptệp nhỏ , điều đó có liên quan đến việc truy xuất và hiển thị các thông báo lỗi.

Vì vậy, điều duy nhất "không hoạt động" trên các trang khác là bước thứ hai này, điều này không quan trọng để tự làm với tổng quan về chức năng liên quan ở trên (tôi có thể đã đi vào quá nhiều chi tiết về thoáng qua, bạn sẽ không cần điều đó cho trường hợp cơ bản).


Bạn có nói rằng API cài đặt không thực sự được thiết kế để sử dụng trong menu và màn hình quản trị viên?
jnthnclrk

@trnsfrmr tốt, đây không phải là nơi để tôi nói nếu nó được hoặc không được thiết kế , nhưng chắc chắn nó không được thiết lập cho điều đó.
Rarst

Chết tiệt, tôi đã hoàn toàn sai rồi. Vậy, API Cài đặt chỉ dành cho màn hình nằm trong mục menu Cài đặt? Trong nhận thức giải thích tại sao sử dụng nó trên các menu tùy chỉnh đã rất khó khăn.
jnthnclrk

Có vẻ như là một sự xấu hổ khi tất cả các tính năng thú vị của API Cài đặt không có sẵn cho các plugin sử dụng các menu tùy chỉnh.
jnthnclrk

@trnsfrmr tốt, bạn vẫn có thể thử và sử dụng nó, chỉ cần bỏ thêm công sức
Rarst

0

Một chút muộn màng, nhưng tôi vừa trải qua điều này. Dựa trên mã của OP, giải pháp tốt nhất tôi tìm thấy là chèn mã này:

function your_admin_notices_action() {
    settings_errors( 'fields_main_input' );
}
add_action( 'admin_notices', 'your_admin_notices_action' );

Điều này sẽ thêm hiển thị thông báo quản trị viên vào các trang quản trị được hiển thị bằng add_menu_page


-1

Chỉ cần thêm

include_once 'options-head.php'; 

chức năng $ của trang menu tùy chỉnh của tôi dường như hoạt động tốt để hiển thị các thông báo lỗi trên các trang menu tùy chỉnh.

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.