게시물을 휴지통으로 옮길 때 실행하는 기능입니다.


9

안녕하세요 게시물이 휴지통으로 이동하는 동안 수행 할 수있는 작업이 있습니다 .... delete_post 및 deleted_post를 시도했습니다. 그것은 각 작업에 대해 두 번 작동하지만 (codex로 작성된 작업 전후) 출력은 휴지통에서 게시물을 삭제할 때만 표시됩니다. 예 어떤 이유로 인해 자신의 게시물이 휴지통으로 이동되었다는 내용의 이메일을 작성자에게 보내고 싶습니다. 일부 user_meta를 업데이트하십시오. 내가 사용하면

add_action('deleted_post', 'emailUser');

또는

add_action('delete_post', 'emailUser');

게시물이 휴지통에서 삭제 된 경우에만 작동합니다. . .

업데이트 : 휴지통 게시물을 사용하여 작동하도록했습니다.

add_action('trash_post', 'emailUser');

그러나 기능의 이중 실행 문제는 여전히 존재합니다. . .


1
아래에 솔루션을 작성하고 답변으로 표시
Ashfame

기능의 이중 실행으로 여전히 정답이 아닙니다 ...
Harjeet Singh

답변:


10

이것은 트릭을 할 것입니다!

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

여기에 함수를 추가하고 did_action을 사용하여 후크가 두 번 이상 실행되지 않도록합니다.

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

언제나처럼, 후크 이러한 종류의 형태를 취 {post_status}_{post_type}하므로 trash_post, trash_page, trash_customposttype, publish_page


2

게시물이 휴지통으로 이동되면 휴지통이 비워지면 다시 호출됩니다.

함수는 이름에 게시물 ID가있는 옵션이 있는지 확인할 수 있습니다. 옵션이 없으면 이메일을 보낸 다음 옵션을 설정합니다. 옵션이있는 경우 (예 : 두 번째로 호출되는 경우) 이메일을 보내지 않습니다.

그런 다음 데이터베이스를 채우지 않도록 옵션을 삭제하십시오.

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 );
   }

}

그것이 작동하는지 알려주세요!


옵션 대신 Transients API를 사용할 수 있으므로 데이터베이스에서 옵션을 삭제하는 것에 대해 걱정할 필요가 없습니다. codex.wordpress.org/Transients_API
Bainternet

잘 작동하는 Simon에게 감사합니다. . . . 내가 왜 이것을 놓친 지 모르겠다. . ..
Harjeet Singh 5

Bainternet, 나는 일시적인 것을 보았고 그것들은 내 경우에는 get_option과 매우 비슷하며 실행은 서버 성능과 삭제 전후의 코드 실행 시간 계산에 달려 있기 때문에 삭제에 대해서도 get_option을 고수했다. 게시물이 어려워 질 수 있습니다.
Harjeet Singh

옵션 필드 또는 과도를 추가 / 편집하고 추가 쿼리를 추가 할 필요가 전혀 없습니다. 대신 did_action을 호출하여 후크가 이미 시작되었는지 확인하십시오.
Tom J Nowell

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

WP 4.7.5에서는 위의 후크가 작동하지 않았습니다.

이것이 나를 위해 일한 것입니다

add_action('wp_trash_post', 'trash_post_function_name');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.