wp_insert_post_data
几乎在post数据插入数据库之前立即激发。在此之后发生的唯一事情是$数据wp_unslash()
. 您应该能够使用此筛选器将发送的wp\\u update\\u post的$postarr与传递给此筛选器的$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;
}
}
在您的文件中。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上的功能。