Функція для виконання, коли публікація переміщена в кошик.


9

Привіт, є дія, яку можна виконати під час переміщення публікації на смітник .... Я спробував delete_post та delete_post. Він працює, але двічі для кожної дії (до та після дії, як написано в кодексі), а вихід відображається лише тоді, коли повідомлення видалено зі сміття. Приклад: Я хочу надіслати електронному листу автору повідомлення про те, що його публікація з певних причин була переміщена в кошик, і оновити деяку 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
    }
}

Тут ми додаємо функцію, і щоб запобігти виконанню гака не один раз, використовуючи didgery:

http://codex.wordpress.org/Function_Reference/did washing

Як завжди, ці види гачків приймають форму {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 Transients замість опцій, тому вам не потрібно буде турбуватися про видалення параметрів з бази даних codex.wordpress.org/Transients_API
Bainternet

Дякую Саймон, що чудово працює. . . . не знаю, як я, чому я пропустив це. . ..
Harjeet Singh

Bainternet, я бачив перехідні процеси, і вони дуже схожі на get_option в моєму випадку, і я маю дотримуватися get_option для видалення речі, оскільки виконання також залежатиме від продуктивності сервера і обчислення часу виконання коду до та після видалення повідомлення може стати важким.
Harjeet Singh

Зовсім не потрібно починати додавати / редагувати поля опцій чи перехідні періоди, додаючи додаткові запити. Замість цього просто зателефонуйте на диспетчер, щоб перевірити, чи гачок уже вистрілив.
Том Дж. Ноуелл

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

Наведений вище гак не працював для мене на WP 4.7.5.

Це те, що працювало для мене

add_action('wp_trash_post', 'trash_post_function_name');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.