我可以在WordPress中使用什么操作,每当保存或更新自定义帖子时都会触发?
2022-08-30 22:54:33
有什么方法可以只为自定义帖子save_post?我的函数.php编码方式是将许多自定义字段附加到不需要/使用它们的普通帖子和页面。
有什么方法可以只为自定义帖子save_post?我的函数.php编码方式是将许多自定义字段附加到不需要/使用它们的普通帖子和页面。
WordPress 3.7引入了一种使用钩子处理这个问题的新方法。save_post_{$post_type}
假设您的自定义帖子类型是“成员目录”。现在,您只能通过使用如下方式对该帖子类型运行save_post:
function my_custom_save_post( $post_id ) {
// do stuff here
}
add_action( 'save_post_member-directory', 'my_custom_save_post' );
自 3.7.0 起更新 - 提醒@Baptiste道具 更新以包括新的 Dev 文档参考 - 道具@stephendwolff
3.7.0 引入了“”钩子,它将由帖子类型触发。这允许您添加特定于自定义帖子类型(或“页面”或“帖子”等)的操作。这样可以节省以下一行。save_post_{$post->post_type}
接受的方法是添加一个操作(在上面的示例中用帖子类型的辅助信息交换词替换)。在操作的回调中,您可以/可能仍然应该进行一些检查,我在下面的示例中记录了这些检查:save_post_{post-type}
{post-type}
/* Register a hook to fire only when the "my-cpt-slug" post type is saved */
add_action( 'save_post_my-cpt-slug', 'myplugin_save_postdata', 10, 3 );
/* When a specific post type's post is saved, saves our custom data
* @param int $post_ID Post ID.
* @param WP_Post $post Post object.
* @param bool $update Whether this is an existing post being updated or not.
*/
function myplugin_save_postdata( $post_id, $post, $update ) {
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) )
return;
// Check permissions
if ( 'page' == $post->post_type )
{
if ( !current_user_can( 'edit_page', $post_id ) )
return;
}
else
{
if ( !current_user_can( 'edit_post', $post_id ) )
return;
}
// OK, we're authenticated: we need to find and save the data
$mydata = $_POST['myplugin_new_field'];
// Do something with $mydata
// probably using add_post_meta(), update_post_meta(), or
// a custom table (see Further Reading section below)
return $mydata;
}
如果要注册多个自定义帖子类型,并且希望将save_post功能合并到单个函数中,请挂接通用操作。但是,如果这些帖子类型保存数据的方式有任何差异,请记住在您的函数中进行帖子类型检查。save_post
例如:if ( 'my-cpt-1' == $post->post_type ){ // handle my-cpt-1 specific stuff here ...