保存后如何编辑帖子数据?


19

我有一个插件,我希望能够通过一些过滤器来运行帖子内容,然后再将其保存到数据库中。通过查看插件api,我看到两个看起来像它们的钩子可能会有所帮助:

save_post
wp_insert_post

唯一的问题是,它看起来save_post不需要返回变量,因此我不知道如何过滤内容,并且wp_insert_post看起来已记录在案。

我想做这样的事情:

add_action('whatever_hook_name','my_function');

function my_function($post_content){
    return $post_content.' <br> This post was saved on '.time();
}

我将做一些比附加时间戳更有用的事情,即运行一些正则表达式过滤器,但这是我要添加的过滤器/操作的一般类型。

更新资料

请注意,我想截取保存在数据库中的数据,而不是在帖子中显示数据时截取(例如:不通过添加过滤器到the_content


注意:您的设计很糟糕:-) 1.每次保存帖子时,都会附加此字符串。(如果你不删除以前的一个,你会得到“很大的This post was...“S 2的数据,这一个应该被存储作为后:-) BTW的meta值:save_post被称作后,数据被保存,因此之后它已保存到数据库(不是您想要的)。
jave.web

Answers:


29

wp_insert_post_data过滤器能做到这一点:

add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );

function filter_post_data( $data , $postarr ) {
    // Change post title
    $data['post_title'] .= '_suffix';
    return $data;
}

2
让我朝正确的方向前进,谢谢。我认为您实际上需要使用add_action代替add_filter。也是你的wpse35931_filter_post_datafilter_handler是不一致的……
cwd

1
这是绝对的过滤器。尽管过滤器和操作基于相同的功能,但允许进行交叉。但是,如果将此操作用作操作,则将无法返回将删除整个点的数据。您要过滤数据然后返回。
杰克

2
wp_insert_post_data可以工作,但是对于OP(可能还有其他)想要完成的工作来说有点过分了。在这种情况下content_save_pre,@ drzaus建议使用一个更简单的选项。
rinogo '16

1
wp_insert_post_data过滤器的开发
jave.web

每当您a)在主题的functions.php中手动调用wp_insert_post()以插入/更新帖子时,就会调用此挂钩吗?b)每当通过任何可能的方式(例如,通过后端,通过前端)保存帖子时,都会调用此挂钩吗? ,以其他方式...)?
Vadim H '18


2

您也可以检查钩子 pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}

1

在保存之前,将以下代码添加到活动主题中以替换<shell>[shell]

 add_filter('content_save_pre', 'my_sanitize_content', 10, 1);
 function my_sanitize_content($value) {
   return str_replace('<shell>', '[shell]', $value);
 }

0

如果您只想在所有帖子的末尾添加类似内容,那么建议您使用the_content过滤器。

function append_to_content( $content ) {
    global $post;
    return $content.'<br />This post was saved on '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );

谢谢,但是我实际上想在将数据保存到数据库之前对其进行编辑。
cwd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.