wp_update_post()
Оновлює запис (пост) у базі даних WordPress.
Для того, щоб функція працювала правильно, необхідно вказати ідентифікатор (ID) посту, який оновлюватиметься.
Функція чекає на екрановані дані. Тобто. не можна використовувати wp_slash() .
Ця функція є обгорткою для wp_insert_post() .
Відмінність цієї функції від wp_insert_post() в тому, що тут немає необхідності передавати всі дані, можна вказати тільки ті, які потрібно оновити, решта даних буде скопійована з наявних у базі даних.
Якщо ревізії записів увімкнені, при оновленні попередні дані не видаляються, а стають ревізією. При цьому всі зв’язки (з довільними полями, категоріями, мітками) переходять до основного запису.
Категорії
Категорії потрібно передватсья як масиву чисел (ID категорій яких буде прикріплена запис). Це стосується і випадків, коли вказується лише одна категорія для запису – все одно передаємо так: array(1).
Увага – нескінченний цикл
Якщо потрібно використовувати wp_update_post() (оновити запис) під час хука save_post , обов’язково зробіть перевірку на тип поста – щоб він не був revision
. Справа в тому, що коли wp_update_post() використовується під час хука save_post (наприклад, довільних метаблоків), зазвичай створюється нескінченний цикл. Це виходить тому, що save_post викликається двічі, якщо включені ревізії: вперше при створенні ревізії, вдруге при оновленні основного посту. У результаті цикл замикається і створюється безліч ревізій.
Те саме відбувається під час спрацьовування хука edit_attachment , якщо під час нього викликається функція wp_update_post() з параметром ID, що відноситься до вкладення (attachment).
Ось приклад, що показує, як потрібно діяти в ситуації, коли wp_update_post() викликає помилку при використанні його під час хука save_post :
add_action( 'save_post', 'my_function'); function my_function( $post_id ){ if ( ! wp_is_post_revision( $post_id ) ){ // видаляємо цей хук, щоб він не створював нескінченного циклу remove_action('save_post', 'my_function'); // оновлюємо піст, коли знову викличеться хук save_post wp_update_post($ my_args); // знову вішаємо хук add_action('save_post', 'my_function'); } }
Майбутня публікація посту
Якщо ви плануєте публікацію чернетки в майбутньому і використовуєте для цього функцію wp_update_post() , то функція не працюватиме, якщо не вказати параметр $my_post->edit_date = true
. WP ігнорує параметр post_date, якщо оновлюється чернетка, але не у випадку, коли вказано параметр edit_date = true.
нотатки
Використовує: wp_restore_post_revision()
wp_insert_post()
Хуків немає.
Повертає
int|WP_Error
.
- ID оновленого запису – при вдалій операції.
- 0 або WP_Error (якщо увімкнено $wp_error) — якщо оновити запис не вдалося.
Використання
wp_update_post($post, $wp_error, $fire_after_hooks);
-
$post
(масив/об’єкт) Асоціативний масив даних містить дані про пост, які потрібно оновити. Ключі масиву ідентичні полям таблиці
wp_posts
в базі даних WordPress.Вказувати ID у масиві обов’язково! (Приклад:
$my_post['ID'] = 37;
).Розуміє всі параметри, які можна передати wp_insert_post() .
За замовчуванням: array()-
$wp_error
(true/false) -
true – включає повернення об’єкта WP_Error при помилці.
Типово: false -
$fire_after_hooks
(логічний) (WP 5.6) -
Чи потрібно запускати функцію
wp_after_insert_post() , яка запускає хуки наприкінці роботи функції.
Типово: true
Приклади
#1 Оновимо контент у запису 37
// Створюємо масив даних $my_post = [ 'ID' => 37, 'post_content' => 'Тут новий контент запису', ]; // Оновлюємо дані у БД wp_update_post(wp_slash($ my_post));
Поля, які можна змінити
Це масив полів, які містять будь-які записи WordPress.
WP_Post Object ( [ID] => 1 [post_author] => 1 [post_date] => 2010-03-26 09:27:40 [post_date_gmt] => 2010-03-26 05:27:40 [post_content] => Контент запису... [post_title] => Назва запису [post_excerpt] => [post_status] => publish [comment_status] => open [ping_status] => open [post_password] => [post_name] => post_name [to_ping] => [pinged] => http://wp-kama.ru/dopolnitelnyie-knopki [post_modified] => 2014-02-10 10:31:17 [post_modified_gmt] => 2014-02-10 06:31:17 [post_content_filtered] => [post_parent] => 0 [guid] => http://wp-kama.ru/post_name [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 41 [filter] => raw )
#2 Оновимо мета-поля у запису 37
У цю функцію також як і wp_insert_post() можна вказати масив метаполів які потрібно додати або оновити.
// Створюємо масив даних $my_post = [ 'ID' => 37, 'meta_input' => [ 'meta_key_1' => 'Meta value 1', 'meta_key_2' => 'Meta value 2', ], ]; // Оновлюємо wp_update_post(wp_slash($my_post));
список змін
З версії 1.0.0 | Введено. |
З версії 3.5.0 | Added $wp_error parameter to allow a WP_Error для того, щоб відновити на failure. |
З версії 5.6.0 | Added the $fire_after_hooks parameter. |