您可以像保存post meta一样执行此操作。您将从当前挂钩中脱钩并更新帖子,如果不这样做,您将陷入无限循环:
/**
* Save Custom Data
* @param int $post_id
* @param Post Object $post
*/
function save_custom_meta_boxes( $post_id, $post ) {
// If we\'re not in the right place, bailout
if( ! isset( $post ) || wp_is_post_autosave( $post ) || wp_is_post_revision( $post ) ) {
return $post_id;
}
// `members` Type Metaboxes
if( \'members\' == $post->post_type ) {
// Update Post Slug
if( isset( $_POST[\'member_user\'] ) && ! empty( $_POST[\'member_user\'] ) ) {
remove_action( \'save_post\', \'save_custom_meta_boxes\' );
wp_update_post( array( \'ID\' => $post_id, \'post_name\' => sanitize_title( $_POST[\'member_user\'] ) ) );
add_action( \'save_post\', \'save_custom_meta_boxes\' );
}
}
}
add_action( \'save_post\', \'save_custom_meta_boxes\', 10, 2 );
如果用户已将值设置为
member_user
字段我们将删除当前操作,使用同一字段将post更新为新的slug,并重新挂钩该操作以继续处理任何其他post元数据。我们利用
sanitize_title()
以确保用户不会添加任何恶意内容。