如何将自定义帖子类型中的特定自定义字段用作插件

时间:2015-10-09 作者:user1902789

我想在自定义帖子类型中使用特定的自定义字段作为帖子的slug。

我的自定义帖子类型为members 我想用作slug的自定义字段是member_user. 我该怎么做?

1 个回复
SO网友:Howdy_McGee

您可以像保存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() 以确保用户不会添加任何恶意内容。