首页 > 解决方案 > 在 WordPress 中注册新用户时如何添加自定义帖子类型?

问题描述

我目前正在定制这个主题https://houzez.co/

当用户注册时,他们可以在注册时选择用户角色。例如,一个代理注册并将他们添加到后端的代理列表中,这是后端菜单项。

我在functions.php中为用户角色创建了一个自定义帖子类型

我想要做的是,每次具有自定义用户角色的用户注册时,它们都会被添加到下面的自定义帖子类型中。

/*Custom Post type start*/
function homease_post_type_insurer() {
$supports = array(
    'title', // post title
    'editor', // post content
    'author', // post author
    'thumbnail', // featured images
    'excerpt', // post excerpt
    'custom-fields', // custom fields
    'comments', // post comments
    'revisions', // post revisions
    'post-formats', // post formats
);
$labels = array(
    'name' => _x('Insurers', 'plural'),
    'singular_name' => _x('Insurer', 'singular'),
    'menu_name' => _x('View Insurers', 'admin menu'),
    'name_admin_bar' => _x('Insurer', 'admin bar'),
    'add_new' => _x('Add New', 'add new'),
    'add_new_item' => __('Add New Insurer'),
    'new_item' => __('New Insurer'),
    'edit_item' => __('Edit Insurer'),
    'view_item' => __('View Insurer'),
    'all_items' => __('All Insurers'),
    'search_items' => __('Search Insurer'),
    'not_found' => __('No Insurer found.'),
);
$args = array(
    'supports' => $supports,
    'labels' => $labels,
    'public' => true,
    'query_var' => true,
    'rewrite' => array('slug' => 'insurer'),
    'has_archive' => true,
    'hierarchical' => false,
);
register_post_type('Insurer', $args);
}
add_action('init', 'homease_post_type_insurer');

标签: phpwordpress

解决方案


user_register要添加有关用户注册的新帖子,您可以使用在用户注册后触发的 WordPress 挂钩。https://developer.wordpress.org/reference/hooks/user_register/

add_action( 'user_register', 'he_create_custom_post_type_for_user' , 20, 1 );
function he_create_custom_post_type_for_user($user_id){
    $user_obj = get_user_by( 'ID', $user_id );
    // replace 'your_role' with the role you want.
    if (in_array('your_role', (array) $user_obj->roles ) ){
        // array for wp_insert_post https://developer.wordpress.org/reference/functions/wp_insert_post/
        $new_post = array(
            'post_title'   => $user_obj->display_name , // Make the post title the name of the user
            'post_type'    => 'Insurer',
            'post_content' => '',
            'post_status'  => 'publish',
            'post_author'  => $user_id,
        );
        $post_id = wp_insert_post($new_post);
        // Your new post has post id $post_id - add update_post_meta ($post_id) if you want to add meta.
    }
}

推荐阅读