Функция, выполняемая при перемещении сообщения в корзину.

9

Привет, есть ли действие, которое может быть выполнено, когда сообщение перемещено в корзину .... Я попытался delete_post и удаленный_пост. Он работает, но дважды для каждого действия (до и после действия, как написано в кодексе), и вывод отображается только тогда, когда сообщение удалено из корзины. Пример. Я хочу отправить автору электронное письмо с сообщением о том, что его сообщение было перемещено в корзину по какой-то причине, и обновить некоторое user_meta. если я использую

add_action('deleted_post', 'emailUser');

или

add_action('delete_post', 'emailUser');

это работает только тогда, когда сообщение удалено из корзины. , ,

Обновление: заставил это работать для сообщений мусора, используя

add_action('trash_post', 'emailUser');

но проблема двойного выполнения функции все еще существует. , ,

Харджит Сингх
источник
1
Напишите решение ниже и отметьте его как ответ
Ashfame
это неправильный ответ, поскольку двойное выполнение функции все еще существует ...
Харджит Сингх

Ответы:

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

Это действие будет вызвано один раз, когда сообщение будет перемещено в корзину, а затем еще раз, когда корзина будет очищена.

Ваша функция может проверять наличие опции с идентификатором записи в названии, если эта опция отсутствует, она отправляет электронное письмо и затем устанавливает опцию. Если опция есть (например, она вызывается во второй раз), вы не отправите электронное письмо.

Не забудьте затем удалить опцию, чтобы ваша база данных не заполнилась ими!

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

}

Дай мне знать, если это работает!

Саймон Блэкборн
источник
вы можете использовать API переходных процессов вместо параметров, чтобы вам не пришлось
Bainternet
Спасибо Саймон, это прекрасно работает. , , , не знаю как, почему я пропустил это. , ..
Харджит Сингх
Bainternet, я видел переходные процессы, и они очень похожи на get_option в моем случае, и я остановлюсь на get_option для удаления, так как выполнение будет зависеть также от производительности сервера и вычисления времени выполнения кода до и после удаления сообщение может стать трудным.
Харджит Сингх
Нет необходимости начинать добавлять / редактировать поля параметров или переходные процессы, добавляя дополнительные запросы. Вместо этого просто вызовите did_action, чтобы проверить, сработала ли ловушка уже.
Том Дж. Новелл
1
add_action('trash_post', 'trash_post_function_name');

Вышеупомянутый хук не работал для меня в WP 4.7.5.

Это то, что сработало для меня

add_action('wp_trash_post', 'trash_post_function_name');
Мохамед Салем Ламири
источник