Chức năng thực thi khi một bài viết được chuyển vào thùng rác.


9

Xin chào, có một hành động có thể được thực hiện trong khi bài đăng được chuyển vào thùng rác .... Tôi đã thử xóa_post và remove_post. Nó hoạt động nhưng hai lần cho mỗi hành động (trước và sau hành động như được viết bằng codex) và đầu ra chỉ được hiển thị khi bài đăng bị xóa khỏi thùng rác. Ví dụ tôi muốn gửi email đến tác giả nói rằng bài đăng của anh ấy đã bị chuyển sang thùng rác vì lý do nào đó và cập nhật một số user_meta. nếu tôi sử dụng

add_action('deleted_post', 'emailUser');

hoặc là

add_action('delete_post', 'emailUser');

nó chỉ hoạt động khi bài viết bị xóa khỏi thùng rác. . .

Cập nhật: làm cho nó hoạt động cho các bài đăng rác bằng cách sử dụng

add_action('trash_post', 'emailUser');

nhưng vấn đề để thực hiện kép chức năng vẫn còn đó. . .


1
Viết giải pháp bên dưới và đánh dấu nó là câu trả lời
Ashfame

Đây không phải là câu trả lời thích hợp vì chức năng thực thi kép vẫn còn đó ...
Harjeet Singh

Câu trả lời:


10

Điều này sẽ làm các mẹo!

add_action('trash_post','my_trash_post_function',1,1);
function my_trash_post_function($post_id){
    if(!did_action('trash_post')){
        // do stuff
    }
}

Ở đây chúng tôi thêm chức năng và để ngăn hook thực thi nhiều lần bằng did_action:

http://codex.wordpress.org/Function_Reference/did_action

Như mọi khi, các loại móc mang hình thức {post_status}_{post_type}, vì vậy trash_post, trash_page, trash_customposttype, publish_pagevv


2

Hành động đó sẽ được gọi một lần khi bài đăng được chuyển vào thùng rác, và sau đó một lần nữa khi thùng rác được dọn sạch.

Chức năng của bạn có thể kiểm tra sự hiện diện của một tùy chọn với ID bài đăng trong tên, nếu tùy chọn không có thì nó sẽ gửi email và sau đó đặt tùy chọn. Nếu tùy chọn ở đó (ví dụ: nó được gọi lần thứ hai), bạn sẽ không gửi email.

Hãy nhớ để xóa tùy chọn, vì vậy cơ sở dữ liệu của bạn không điền vào chúng!

add_action( 'delete_post', 'emailUser' );

function emailUser( $postid ) {

   if ( ! get_option( 'user_emailed_' . $postid ) ) {
      // send email here
      update_option( 'user_emailed_' . $postid, 'anything' );
   } else {
      delete_option( 'user_emailed_' . $postid );
   }

}

Cho tôi biết nếu nó hiệu quả!


bạn có thể sử dụng API Transents
Bai Internet

Cảm ơn Simon mà làm việc tuyệt vời. . . . không biết tại sao tôi lại bỏ lỡ điều này . ..
Harjeet Singh

Trong mạng, tôi đã thấy các quá độ và chúng khá giống với get_option trong trường hợp của tôi và tôi cũng sử dụng get_option cho việc xóa vì việc thực thi cũng phụ thuộc vào hiệu suất của máy chủ và tính toán thời gian thực thi mã trước và sau khi xóa bài viết có thể gặp khó khăn.
Harjeet Singh

Không cần thiết phải bắt đầu thêm / chỉnh sửa các trường tùy chọn hoặc tạm thời, thêm các truy vấn bổ sung. Thay vào đó, chỉ cần gọi did_action để kiểm tra xem hook đã bắn chưa.
Tom J Nowell

1
add_action('trash_post', 'trash_post_function_name');

Móc trên không hoạt động với tôi trong WP 4.7.5.

Đây là những gì làm việc cho tôi

add_action('wp_trash_post', 'trash_post_function_name');
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.