Tại sao save_post hành động kích hoạt khi tạo một bài đăng mới?


31

Tôi ngạc nhiên bởi thực tế là chức năng của tôi đã xử lý các save_posthành động kích hoạt khi tôi nhấp vào liên kết "Bài đăng mới" trong Bảng điều khiển dành cho quản trị viên. Lưu ý - đây là trước khi tôi nhấn Savehoặc Update, và nó kích hoạt ngay lập tức, không phải sau một thời gian trôi qua hoặc tự động cập nhật.

Mặt khác, khi tôi gõ một cái gì đó và nhấn Publishhoặc Updatehoặc các Save Draftnút, câu lệnh echo tôi đã đặt bên trong trình xử lý hành động của mình không phát ra, vì vậy có vẻ như hành động đó KHÔNG được kích hoạt vào bất kỳ lúc nào khác. Điều này có thể không liên quan.

Đây là mã của tôi:

add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
  echo "<h1>YES!</h1>";
}

YES này vang (ở phía trên cùng của trang) khi tôi bấm "New Post" liên kết nhưng KHÔNG tiếng vang khi tôi gõ một cái gì đó và nhấn sau đó Updatehay Publishhay Save Draft. Điều này dường như mâu thuẫn với các tài liệu về save_posthành động và wp_insert_post()chức năng.

Bất cứ ai có thể làm rõ điều này cho tôi?


Tuyệt vời!!! tôi đang gặp tình huống tương tự khi lưu các trường metabox tùy chỉnh. bất kỳ ý tưởng những gì tôi có thể sử dụng ??
Prasath Nadarajah

Câu trả lời:


39

Khi bạn nhấp vào 'Bài đăng mới', bạn chỉ cần tải trang wp-admin/post-new.php.

Khi làm như vậy, WordPress sẽ luôn tạo một bài đăng mới ('Bản nháp tự động') để đảm bảo tất cả các tính năng khác (như tải lên phương tiện) và plugin hoạt động như bình thường, ngay cả trước khi bạn thực sự lưu bản nháp hoặc xuất bản bài đăng.

Và điều này, lần lượt, kích hoạt save_post. Do đó tiếng vang của bạn.

Được rồi, vậy tại sao tôi không nhận được tiếng vang khi cập nhật hoặc xuất bản?

Ở giữa lưu và tải trang sau, WordPress thực sự đang gửi một GETchuyển hướng trở lại cùng một trang, điều này có vẻ trong suốt (bạn có thể chứng kiến ​​điều này với một màn hình HTTP, chẳng hạn như HTTPFox ).

Nói cách khác;

  1. Bạn bấm UpdatehoặcPublish
  2. Trình duyệt gửi dữ liệu đến máy chủ
  3. WordPress xử lý nó và trong quá trình kích hoạt save_post
  4. WordPress gửi lại tiêu đề chuyển hướng và thoát, trước khi bất kỳ đầu ra trình duyệt nào xảy ra (bao gồm cả tiếng vang của bạn) *
  5. Trình duyệt theo chuyển hướng và tải trang 'chỉnh sửa bài'.

Chuyển hướng có vẻ không cần thiết (vì bạn chỉ có thể POSTvào cùng một trang), nhưng đó là một phần của kỹ thuật được gọi là Đăng / Chuyển hướng / Nhận để tránh gửi biểu mẫu trùng lặp .

Nếu bạn đang cố in ra các tin nhắn tùy chỉnh dựa trên kết quả của một chức năng được nối vào save_post, hãy xem các câu hỏi / câu trả lời này .

* Không hoàn toàn đúng, tiếng vang của bạn trong thực tế sẽ xảy ra trước khi tiêu đề chuyển hướng được gửi, nhưng trình duyệt sẽ loại bỏ nó hoặc mọi thứ xảy ra quá nhanh đến nỗi nó không bao giờ xuất hiện.


Nổi bật. Cảm ơn cho một câu trả lời đầy đủ và chi tiết! Trong mối quan tâm của việc tìm hiểu thêm, làm thế nào bạn bắt gặp kiến ​​thức này ngay từ đầu?
Tom Auger

Thông qua sự thất vọng tương tự mà bạn đã trải qua;) Hãy nắm giữ một IDE tốt (Tôi sử dụng phpDesigner) và chỉ đi sâu vào (các) tệp quản trị có liên quan.
TheDeadMedic

1
Ngay trên người anh em. Cảm ơn vì đã ở đó với chuyên môn của bạn!
Tom Auger

Tuyệt vời của thông tin. Tôi đã phát điên vì trong máy chủ cục bộ của tôi có vẻ như hoạt động "ok", nhưng không phải trong máy chủ sản xuất của tôi ... có vẻ như trong máy chủ cục bộ của tôi, nó không áp dụng đúng kỹ thuật post / redirect / get bởi vì nó không đúng gửi tiêu đề chuyển hướng (không biết tại sao mặc dù).
WebMacheter
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.