Intereting Posts
Пользовательский заказ для массива Mysql Возвращать единый таксономический термин вне цикла Шаблон страницы категории. Невозможно получить идентификатор категории. Поиск фактических функций, добавленных в крючки и фильтры API в цифрах? Функция для отключения тегов привязки «href», которые содержат «имя-данные» только на мобильных устройствах Jumbotron не отображается в Firefox или Safari $ post> ID выводит неверный идентификатор сообщения Альтернатива wp_get_nav_menu_items? изменение цвета фона в зависимости от родительской страницы минимальное требование для добавления сообщений через базу данных Создание пользовательских шаблонов после листинга в 20-летней детской теме вызывать пользовательское действие после удаления учетной записи Последние сообщения Использование frontpage.php не * вполне * работает правильно Как отключить предупреждение «Резервное копирование этого сообщения в вашем браузере отличается от версии ниже»?

Каковы ограничения wp_update_post ()?

У меня есть два поля в таблице wp_posts, которые wp_update_post() похоже, не могут быть изменены. Я пытаюсь использовать следующий код:

 $echo $group_access; $echo $tag_list; $my_post = array( 'ID' => 12095, 'post_title' => 'Test Title', 'post_content' => 'Test Content', 'group_access' => $group_access, 'tag_list' => $tag_list, ); // Update the post into the database $post_id = wp_update_post( $my_post, true ); if (is_wp_error($post_id)) { $errors = $post_id->get_error_messages(); foreach ($errors as $error) { echo $error; } } 

$group_access и $tag_list отражают правильные значения. post_title обновление post_title и post_content . group_access и tag_list не обновляются, и ошибок нет.

Естественно, я проверил таблицу, а group_access и tag_list – это правильные заголовки столбцов.

Я не понимаю, почему это не работает. Неужели wp_update_post() не может изменить столбцы, не входящие в стандартную установку WP? Возможно, это тип данных (например, я должен передавать массив или целое число, но я передаю строку)?

Solutions Collecting From Web of "Каковы ограничения wp_update_post ()?"

Ты прав; WordPress не будет обновлять собственные столбцы базы данных, используя wp_update_post() или wp_insert_post() . Вместо создания пользовательских столбцов базы данных рассмотрите использование метаданных и / или таксономических API-интерфейсов.

Если вы должны wp_posts таблицу wp_posts , вам нужно будет самостоятельно обновить свои собственные столбцы, и вы можете столкнуться с проблемами с другими плагинами, которые не учитывают столбцы пользовательской базы данных.

wp_insert_post_data срабатывает почти сразу перед отправкой данных в базу данных. Единственное, что происходит после этого, это то, что $ data является wp_unslash() . Вы можете использовать этот фильтр, чтобы сравнить $ postarr, который вы отправили wp_update_post, с $ postarr, который передается этому фильтру. Если они отличаются друг от друга, вы можете отформатировать данные до того, как они будут вставлены в базу данных.

Я быстро издевался над этим. Не тестировали его, но он должен работать с небольшими изменениями.

В классе-wpse-258786.php:

 class wpse_258786 { protected $postarr; public function __construct( $postarr ) { $this->postarr = $postarr; } public function insert_post_data( $data, $postarr ) { //* Make sure this is added each time before each post remove_action( 'wp_insert_post_data', [ $this , 'insert_post_data' ] , 10 ); if( $postarr !== $this->postarr ) { //* Format the $data to insert into table } return $data; } } 

в файле file.php

 include_once( PATH_TO . 'class-wpse-258786.php' ); ... $echo $group_access; $echo $tag_list; $my_post = array( 'ID' => 12095, 'post_title' => 'Test Title', 'post_content' => 'Test Content', 'group_access' => $group_access, 'tag_list' => $tag_list, ); //* Filter the post data before inserting into database add_action( 'wp_insert_post_data', [ new wpse_258786( $my_post ), 'insert_post_data' ], 10, 2 ); // Update the post into the database $post_id = wp_update_post( $my_post, true ); 

Изменить для добавления: то, что я сделал бы, – это разместить класс в отдельном файле, включить его один раз и затем добавить фильтр в класс. Затем прямо перед вами wp_update_post() добавьте фильтр с данными post в конструкторе. Когда крючок срабатывает, вы можете удалить фильтр, чтобы он не срабатывал более одного раза.

В ответ на ваш комментарий вы можете использовать $ wpdb, и на самом деле так работает wp_insert_post() . Самое замечательное в использовании wp_insert_post() заключается в том, что оно вводит множество действий и фильтров, которые мы можем использовать для изменения данных до их ввода в базу данных. Проверьте wp_insert_post() на trac.