Ý định thực sự cho admin-post.php là gì?


8

Trong khi tìm kiếm xử lý gửi biểu mẫu thích hợp trong các plugin cho người dùng (frontend), tôi đã tình cờ thấy bài viết này Xử lý POST Yêu cầu WordPress Way , khuyến khích sử dụng admin-post.phpcho mục đích này. Nhìn vào tiêu đề, chúng ta có thể tìm thấy một số loại xác nhận:

 /**
 * WordPress Generic Request (POST/GET) Handler
 *
 * Intended for form submission handling in themes and plugins.
 *
 * @package WordPress
 * @subpackage Administration
 */

Mối quan tâm chính của tôi là phương pháp này xuất phát từ một phần quản trị của mã WP và việc sử dụng nó trong các tác vụ không phải của quản trị viên làm cho một số sự mơ hồ.

Bất cứ ai (đặc biệt là các tác giả WP) có thể xác nhận rằng ý định tiếp cận này thực sự toàn diện hoặc chỉ quản trị viên như tôi nghĩ?


3
Tôi không nhận được câu hỏi. mã ở đó nhỏ và không mơ hồ. Nếu nó phù hợp với nhu cầu của bạn, bạn có thể sử dụng nó, nếu không, thì không. Ý định của một mã thường được ghi lại trong chính mã đó;)
Mark Kaplun

Câu trả lời:


10

admin-post.php giống như một bộ điều khiển mans nghèo để xử lý các yêu cầu.

Điều này hữu ích theo nghĩa là bạn không cần xử lý yêu cầu của mình trên một móc thay thế, chẳng hạn như initvà kiểm tra xem liệu các khóa đặc biệt có tồn tại trên các siêu lớp hay không, như:

function handle_request() {

    if ( !empty($_POST['action']) && $_POST['action'] === 'xyz' ) {
        //do business logic
    }

}

add_action('init', 'handle_request');

Thay vào đó, sử dụng admin-post.php cung cấp cho bạn khả năng chỉ định hàm gọi lại sẽ luôn được gọi theo bất kỳ yêu cầu nào cung cấp giá trị hành động khớp với hậu tố được cung cấp cho hành động.

function handle_request() {

    //do business logic here...

}

add_action( 'admin_post_handle_request', 'handle_request' );
add_action( 'admin_post_nopriv_handle_request', 'handle_request' );

Trong ví dụ trên, chúng tôi có thể từ bỏ nhu cầu kiểm tra !empty($_POST['action']) && $_POST['action'] === 'xyz'vì tại thời điểm này, việc xử lý đã được chúng tôi quan tâm.

Đó là kết quả của việc chỉ định tham số và giá trị hành động và đăng giá trị đã nói lên admin-post.phpURL.

Ngoài ra, điều có lợi là admin-post.phpxử lý cả hai $_POST$_GETdo đó không cần thiết phải kiểm tra loại yêu cầu nào là tất nhiên trừ khi bạn muốn xử lý phức tạp hơn.

Dòng dưới cùng:

Nó là an toàn để sử dụng, nó chỉ là tên ném bạn đi.

Nhân tiện, bạn cũng nên nhớ wp_redirect()người dùng quay lại vị trí có thể chấp nhận vì yêu cầu admin-post.phpsẽ không trả lại gì ngoài màn hình trắng như phản hồi của nó.


2
@PieterGoosen haha ​​... trong trường hợp đó tôi dám nói lưu trữ mọi thứ vào đĩa trong thư mục tải lên cue flames ngay bây giờ : D
Adam

2
@PieterGoosen, LOL, nhưng những con chó kỳ lạ và biết làm bất cứ điều gì :)
Mark Kaplun

2
@KrzysztofPrzygoda, bạn chỉ đang cố gắng làm cho cuộc sống của bạn trở nên phức tạp. Nó nằm trong lõi từ 2.6 nhưng hầu như không có tài liệu nào và lõi không sử dụng nó vì vậy tốt hơn hết bạn không nên tự mình sử dụng nó. Ý định của những người làm cho nó không quan trọng chút nào, câu hỏi duy nhất nên là "nó có hữu ích không".
Đánh dấu Kaplun

2
Cá nhân tôi đã biết sử dụng các móc này, nhưng tôi chỉ từng làm như vậy từ phần phụ trợ. Tôi không thấy vấn đề gì với nó. Core không sử dụng nó có lẽ vì khó khăn trong việc sao lưu kiến ​​trúc cũ của họ và hoặc không muốn mọi người tái cấu trúc (chỉ là suy đoán). Nó được sử dụng, cho dù cốt lõi có sử dụng nó hay không có thể không phải là mục đích trực tiếp của họ mà là phương pháp cho bạn nhà tích hợp, chắc chắn ... sử dụng nó. Như ý kiến ​​của tôi chỉ ra ở trên, nó có thể là một cách rõ ràng để xử lý một số loại yêu cầu. Đây không phải là một quy tắc khó khăn và nhanh chóng, hãy làm những gì phù hợp với bạn.
Adam

3
@KrzysztofPrzygoda chưa bao giờ là một cách thực hành chuẩn / tốt nhất để xử lý các yêu cầu bài đăng, đặc biệt là trong phần phụ trợ được coi là "cách WordPress". Nhưng chỉ vì cốt lõi không sử dụng những hành động này không có nghĩa là bạn không nên trong một số trường hợp. Mọi người thực hiện tất cả các loại xử lý biểu mẫu điên rồ trong WordPress cho các yêu cầu ở phía sau và phía trước; có rất ít tiêu chuẩn hoặc tính nhất quán, chỉ là những người làm những điều điên rồ trên tất cả các cách móc. Chúng là các móc rất thuận tiện, đặc biệt nếu bạn không cần trả lại dữ liệu bằng chuyển hướng.
Adam

2

Có vẻ khá rõ ràng từ việc sử dụng noprivxử lý (đối với người dùng chưa đăng nhập) ở admin-post.phpchỗ điều này thực sự admin-ajax.phpcó thể sử dụng được cho cả xử lý biểu mẫu frontend và backend, rất giống với cách sử dụng.


Tôi thừa nhận rằng mã trông có thể sử dụng được nhưng ... bạn phải thừa nhận rằng người dùng thực hiện một số hành động quản trị có vẻ đáng ngờ, phải không? Đây là nơi mơ hồ đến từ.
Krzysztof Przygoda

Có, tôi cũng có suy nghĩ tương tự khi lần đầu tiên sử dụng admin-ajax.php- phần quản trị viên có vẻ hơi sai lệch trong cả hai trường hợp ... có thể giúp quản trị viên nghĩ như trong adminstrationthay vì administrator...
Majick
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.