我正在寻找一个管理钩子,用于保存帖子后被解雇的帖子。问题:save_post
不包含已更改的数据到post对象。新更改只能在$_POST
数组中找到。但是,一旦post_name
更改,我需要一种方法将永久链接更新为外部API。但它不起作用,因为$post
对象在保存操作之前仍然是旧对象。
答案 0 :(得分:3)
你应该能够在使用优先级参数更新帖子后挂钩(在本例中设置为20):
add_action( 'save_post', 'your_function', 20, 1 );
function your_function( $post_id ) {
// this should be the updated post object
$post = get_post( $post_id );
}
答案 1 :(得分:1)
我认为最合适的方法是从数据库中查询旧值并将值与$_POST
数组值进行比较。
这是一个可以帮助您从数据库中读取值的链接。
http://codex.wordpress.org/wpdb#query_-_Run_Any_Query_on_the_Database
P.S:你当然应该在#34;之前进行这种比较。将新值保存到数据库中。
答案 2 :(得分:0)
自WordPress 3.0.0起,post_updated
钩可用。这有助于了解更新后帖子中发生了什么变化。您可以在WP Codex中使用the example作为示例。
add_action( 'post_updated', 'check_updated_post_name', 10, 3 );
function check_updated_post_name( $post_ID, $post_after, $post_before ) {
if ( $post_after->post_name != $post_before->post_name ) {
// do what you need
}
}
如果刚刚插入了帖子,则可以使用save_post
或save_post_{$post->post_type}
挂钩。检查第三个参数的值以确保帖子是新的。
add_action( 'save_post', 'check_new_post_name', 10, 3 );
function check_new_post_name( $post_ID, $post, $update ) {
if ( ! $update ) {
// do what you need
}
}