我想在自定义帖子类型中使用特定的自定义字段作为帖子的slug。
我的自定义帖子类型为members
我想用作slug的自定义字段是member_user
. 我该怎么做?
我想在自定义帖子类型中使用特定的自定义字段作为帖子的slug。
我的自定义帖子类型为members
我想用作slug的自定义字段是member_user
. 我该怎么做?
您可以像保存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()
以确保用户不会添加任何恶意内容。我使用以下代码://custom post = project //taxonomy = project-category $args = array( \'post_type\' => \'project\', ); $query = new WP_Query( $args ); // The Loop if ( $query->have_posts() ) { while ( $query-