Intereting Posts
Стандартное расположение плагинов для сохранения / кеширования файлов? Индивидуальная панель администратора для каждого пользователя Buddypress – добавление пользовательских сообщений для участников Добавление формы в конец содержимого Разбиение страницы разбито, именовав конфликт между CPT и страницей Есть ли способ внедрить форму Документов Google на странице без использования плагинов? Добавление содержимого в архивные и таксономические страницы для пользовательских типов сообщений? как сохранить несколько настраиваемых полей для публикации за один раз? wp_enqueue_script не распознает мой js-файл? Заменить основной запрос с помощью пользовательского запроса WordPress admin для персонализированного сообщения, скрыть / свернуть основные поля «title» и «description» Можно ли определить две базы данных для одной установки? Capcha не отображается Пользовательский почтовый тип / таксономия переписывает архив страницы 2 дает 404 Использование магистрали с помощью API WordPress AJAX

Не удается изменить post_modified в wp_insert_post (ошибка?)

Он пахнет, как ошибка, но добавление post_modified в wp_insert_post не работает:

$wp_test = array( 'post_title' => 'test', 'post_content' => 'test', 'post_status' => 'publish', 'post_type' => 'test', 'post_author' => 1, 'post_date' => '2015-01-22 22:00:12', 'post_date_gmt' => '2015-01-22 22:00:12', 'post_modified' => '2016-04-18 12:12:12', 'post_modified_gmt' => '2016-04-18 12:12:12', 'comment_status' => 'closed' ); $wp_id = wp_insert_post( $wp_test ); 

Дата post_modified не работает и получает то же значение, что и post_date, а не желаемое '2016-04-18 12:12:12'. Это ошибка? Я использую wp 4.5 (тема twentysixteen). Я исправил его, используя следующий код, но я думаю, что это может быть более практичным …

 $wp_test = array( 'post_title' => 'test', 'post_content' => 'test', 'post_status' => 'publish', 'post_type' => 'test', 'post_author' => 1, 'post_date' => '2015-01-22 22:00:12', 'post_date_gmt' => '2015-01-22 22:00:12', 'comment_status' => 'closed' ); $wp_id = wp_insert_post( $wp_test ); // ugly fix $wpdb->query( "UPDATE $wpdb->posts SET post_modified = '2016-04-18 12:12:12',post_modified_gmt = '2016-04-18 12:12:12' WHERE ID = $wp_id"); 

Solutions Collecting From Web of "Не удается изменить post_modified в wp_insert_post (ошибка?)"

Это не ошибка, на самом деле WordPress не позволяет (используя аргументы) устанавливать дату изменения даты. Внутренне WordPress установил его в текущее время, если вы обновляете существующий пост, просто установите его для публикации даты.

в /wp-includes/post.php#L3192 вы можете видеть, что wp_insert_post не использует этот аргумент

 if ( $update || '0000-00-00 00:00:00' == $post_date ) { $post_modified = current_time( 'mysql' ); $post_modified_gmt = current_time( 'mysql', 1 ); } else { $post_modified = $post_date; $post_modified_gmt = $post_date_gmt; } 

Документация мне кажется неправильной. Для этого я создал билет № 36597 . Будем надеяться, что документация будет исправлена.

PS: Однако вы можете использовать фильтр wp_insert_post_data чтобы установить свою собственную дату модификации.

EDIT: WordPress уже запускает запрос на вставку, а затем запускает другой SQL-запрос, чтобы обновить время модификации post, это не очень хорошая идея, лучше мы можем изменить дату перед тем, как WordPress вставляет ее в базу данных. Я думаю, что это не будет стоить вам больше, чем отдельный SQL-запрос.

Сначала добавьте фильтр непосредственно перед wp_insert_post и удалите его, чтобы не влиять на другие функции вставки.

 add_filter( 'wp_insert_post_data', 'alter_post_modification_time', 99, 2 ); $wp_id = wp_insert_post( $wp_test ); remove_filter( 'wp_insert_post_data', 'alter_post_modification_time', 99, 2 ); 

В функции обратного вызова задается время модификации, которое мы передали в аргументах функции wp_insert_post() . ( Не забывайте добавлять время модификации сообщения, которое вы удалили из аргументов )

 function alter_post_modification_time( $data , $postarr ) { if (!empty($postarr['post_modified']) && !empty($postarr['post_modified_gmt'])) { $data['post_modified'] = $postarr['post_modified']; $data['post_modified_gmt'] = $postarr['post_modified_gmt']; } return $data; }