який правильний спосіб підключити при оновленні публікації


19

Я намагаюся підключити, коли повідомлення оновлюється, але всі гачки я намагаюся ніколи не виконувати, крім updated_post_meta

add_action('updated_post_meta', 'my_function');

function my_function($post_id) {    
    echo 'This is my post ID : '.$post_id;
}

Я спробував це, add_action('save_post', 'my_function');але жоден ідентифікатор не лунав, або, можливо, це повідомлення вже лунає, але ніколи не відображається через те, що заголовок переспрямування не надсилається.


2
у вас є пробіл після save_postцього, це друкарська помилка, чи це було у вашому оригінальному коді? також включити налагодження під час розробки.
Міло

@Milo Вибачте, помилка друку, але не в оригінальному коді
ruly

якщо це так, то ви бачите свій результат у верхньому лівому куті екрану під час створення нової публікації. збереження існуючої публікації відбувається перед перенаправленням, тому ви нічого не побачите, якщо не включена налагодження.
Міло

Відповіді:


55

Коли повідомлення оновлюється, вистрілюються деякі гачки:

  • 'pre_post_update'це дія, запущена перед оновленням публікації, аргумент прийнято 2: $post_IDі $dataце масив усіх інших стовпців бази даних таблиці публікацій
  • 'transition_post_status'- це гачок, запущений під час оновлення, і передає 3 аргументи: $ new_post_status $old_post_statusта $post(object).
  • Потім є дві інші перехідні гачки, але вони мають динамічну назву, це означає, що ефективна дія, що справляється, залежить від старого та нового статусу повідомлення. "{$old_status}_to_{$new_status}"і "{$new_status}_{$post->post_type}". Перший передає єдиний об'єкт публікації як аргумент, другий передає ідентифікатор повідомлення та об'єкт публікації. Знайдіть документацію тут .
  • 'edit_post'які передають 2 аргументи: $post_IDі $post(об'єкт)
  • 'post_updated'що передача 3 аргументу: $post_ID, $post_after(після об'єкту після поновлення), $post_before(після об'єкту перед оновленням)
  • Ще один динамічний гачок: "save_post_{$post->post_type}" це залежить від поштового типу, наприклад , для стандартних посад 'save_post_post'і сторінок 'save_post_page', цей гак пропуск 3 аргументу: $post_ID, $post(об'єкт) і $updateце логічне значення (істина або брехня) , що справедливо при виконанні оновлення, в Фактично цей гачок звільняється і тоді, коли повідомлення зберігається вперше.
  • ' save_post', що запускається як при оновленні, так і при першому збереженні, і передає ті ж три аргументи попереднього гака.
  • ' save_post_{$post_type}', що запускається як при оновленні, так і при першому збереженні і передає ті ж перші 2 аргументи попереднього гака.
  • Нарешті у вас є ' wp_insert_post' , який запускається як при оновленні, так і при першому збереженні, і передайте ті ж три аргументи попередніх 2 гаків.

Ці гачки звільняються щоразу, коли повідомлення оновлюється, як через сторінки адміністратора, так і через сервер адміністратора, коли оновлено "вручну" за допомогою wp_update_post або wp_insert_postфункцій.

Коли публікація оновлюється на сторінках адміністратора, з'являються додаткові гачки, наприклад, 'update_post_redirect'або 'post_updated_messages'. (Побачити це та ці відповіді WPSE щодо прикладів використання).

Зауважте, що якщо ви хочете використовувати якийсь аргумент гаків, це не перший, ви повинні прямо заявити про це під час add_actionвиклику.

Наприклад, якщо ви хочете використовувати '$update'аргумент (тобто третій) 'save_post'гака, який потрібно додати 3як $accepted_argsпарам на add_action( див. Документи ):

// if you don't add 3 as as 4th argument, this will not work as expected
add_action( 'save_post', 'my_save_post_function', 10, 3 );

function my_save_post_function( $post_ID, $post, $update ) {
  $msg = 'Is this un update? ';
  $msg .= $update ? 'Yes.' : 'No.';
  wp_die( $msg );
}

Остання примітка щодо термінів : ви повинні бути впевнені в цьомуadd_action викликається до початку дії, інакше це нічого не зробить.

Наприклад, цей код:

wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );

нічого не зробить, бо дія буде додана після того, як гачок вистрілений. Це просто розпізнати, в реальному світі код не завжди такий.


Я думаю, що гачок дії "save_post" також запускається при натисканні кнопки Додати нове (повідомлення, сторінка, CPT) на панелі приладів. Щоб побачити себе, просто запустіть цей код. function save_post_test( $post_id, $post, $update ) { print ' post_id : '; var_export( $post_id ); print ' post : '; var_export( $post ); print ' update : '; var_export( $update ); wp_die( 'save_post hook runs when you click Add New..' ); } add_action( 'save_post', 'save_post_test', 10, 3 );Чому дія "save_post" працює на "Додати нове", а не на "Опублікувати"? Я маю на увазі зробити авто-чернетку публікації.
lowtechsun

@lowtechsun Як це сказано в A, гачки запускаються щоразу, коли повідомлення оновлюється, тобто зберігається в БД. Коли ви натискаєте "Додати нову", близько до завантаження сторінки, WP створює чернетку, що зберігається в БД, щоб він запускав гачки.
gmazzap

Дякую, що повернулися до мене. Щойно дізнався про це вчора і подумав, що поняття цього заплутане. Значить спочатку я відкриваю сторінку, щоб додати нову публікацію. На цьому етапі я подумав, що ще не створив посаду. Лише коли я потрапляю на «Опублікувати», я думаю, що створено нову публікацію. Здійснюючи це далі, я сподіваюся, що WP видалить повідомлення з автоматичною чернеткою, якщо натисніть кнопку Додати нове, але потім залиште сторінку, не натискаючи кнопку Опублікувати?
lowtechsun

2

Чому б не зачепитись post_updated_messages. Таким чином, ви зможете показати це повідомлення так само, як оновлений текст за замовчуванням Wordpress оновлений.

add_filter('post_updated_messages', 'your_message');

function your_message(){
}

Шукайте приклад тут:

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

під post_updated_messages

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