使用WordPress用户配置文件还是使用‘工作人员’的自定义帖子类型?

时间:2013-06-17 作者:bongoman

我经常遇到的一种情况是,一个组织可能有几个员工,我想为他们列出一些清单,并在一个个人资料页面上显示个人简历信息。

通常,我会为员工创建一个自定义的职位类型,如果需要的话,还可能创建一个自定义的分类法。

但现在我想知道,在Wordpress中使用内置的“用户”帖子类型是否不是最佳选择。我意识到我可以自定义用户配置文件字段、显示用户列表、单个配置文件等,我相信自定义分类也是可能的。

这里有最佳实践吗?

我现在有一个案例,所有员工也都用自己的名字写博客文章,所以无论如何都有一个用户帐户,我想也许我最好是充实他们的用户档案并与作者合作。php而不是使用自定义的post类型“staff”。

目前,我一直在使用CPT,并使用Posts 2 Posts插件将他们的“staff”帖子与他们的“user”帐户相关联,从而在他们的单个staff页面上创建他们的博客帖子列表。

任何关于如何在wordpress中最好地实现这一点的想法都将不胜感激。

1 个回复
SO网友:gmazzap

如果你想在网站上公开展示的人都是用户,即拥有帐户和写帖子,那么我认为最好使用WordPress用户功能:你要放在CPT中的所有信息也可以放在用户元数据中,创建用户是强制性的(他们必须登录),而创建CPT是可以避免的,对我来说是多余的。

然而,我知道使用CPT可能会更简单,原因如下:

WP admin上的默认配置文件页面几乎没有信息author.php 不是配置文件页WP_User_Query 要做到这一点,将员工与必须隐藏的用户隔离可能有点困难:没有用户分类法,如果要将公共角色分配给任何不能公开可见的用户,使用用户角色可能会产生问题

创建新的用户角色。您可以从标准角色克隆功能,但创建角色以及将员工与其他用户隔离将非常简单example.com/staff 将调用一个页面(您分配在3上创建的模板的页面)和URL,如example.com/staff/user/nickname 将调用同一页,但传递查询变量user 有价值的nickname 您可以在页面中使用它来显示用户配置文件1。,2、和4。可以在插件中轻松完成。我将为您提供此插件的骨骼,应该加以改进:

<?php
/**
 * Plugin Name: Staff Plugin
 * Description: Test
 * Author: G.M.
*/

/**
* Add a new role cloning capabilities from editor and flush rewrite rules
*/
function install_staff_plugin() {
    $editor = get_role( \'editor\' );
    add_role( \'staff\', \'Staff\', $editor->capabilities );
    staff_plugin_endpoint();
    flush_rewrite_rules();
}

/**
* Remove the role and flush rewrite rules
*/
function unistall_staff_plugin() {
    remove_role( \'staff\' );
    flush_rewrite_rules();
}

/**
* Add the endpoint
*/
function staff_plugin_endpoint() {
    add_rewrite_endpoint( \'user\', EP_PAGES );
}

/**
* Add custom field to profile page
*/
function staff_plugin_profile_fields( $user ) {
    $fields = array(
        \'facebook\' => __(\'Facebook\'),
        \'twitter\'  => __(\'Twitter\'),
        \'photo_id\' => __(\'Photo ID (use attachment id)\')
    );
    echo \'<h3>\' . __(\'Staff Information\') . \'</h3>\';
    echo \'<table class="form-table">\';
    foreach ( $fields as $field => $label ) {
        $now = get_user_meta( $user->ID, $field, true ) ? : "";
        printf( \'<tr><th><label for="%s">%s</label></th>\',
            esc_attr($field), esc_html($label) );
        printf( \'<td><input type="text" name="%s" id="%s" value="%s" class="regular-text" /><br /></td></tr>\', 
            esc_attr($field), esc_attr($field), esc_attr($now) );
    }
    echo \'</table>\';
}

/**
* Save the custom fields
*/
function staff_plugin_profile_fields_save( $user_id ) {
    if ( ! current_user_can( \'edit_user\', $user_id ) ) return;
    $fields = array( \'facebook\', \'twitter\', \'photo_id\' );
    foreach ( $fields as $field ) {
        if ( isset( $_POST[$field] ) ) 
            update_user_meta( $user_id, $field, $_POST[$field] );
    }
}

add_action( \'init\', \'staff_plugin_endpoint\' );
add_action( \'show_user_profile\', \'staff_plugin_profile_fields\' );
add_action( \'edit_user_profile\', \'staff_plugin_profile_fields\' );
add_action( \'personal_options_update\', \'staff_plugin_profile_fields_save\' );
add_action( \'edit_user_profile_update\', \'staff_plugin_profile_fields_save\' );
register_activation_hook( __FILE__, \'install_staff_plugin\' );
register_deactivation_hook( __FILE__, \'unistall_staff_plugin\' );
插件完全按照我说的做。关于为用户配置文件添加自定义字段,例如,我只添加了3个字段。其中一个用于用户映像,并接受附件的ID。当然,在现实世界中,最好打电话给媒体上传者,让用户选择上传图像,但这不在这个答案的范围内。。。

保存并激活插件后,我们必须创建页面模板,创建页面,并分配该模板。再次,我将在此发布模板的概念验证:

<?php
/**
 * Template Name: Staff Page
*
*/

get_header(); ?>

<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">

<?php
/* The page content */
while ( have_posts() ) : the_post();
    $page_link = get_permalink();
    the_content();
endwhile;

$required_user = get_query_var( \'user\' );

$wanted_meta = array(
    \'first_name\', // This is a standard meta
    \'facebook\',   // This is an example of custom meta
    \'twitter\'     // This is another example of custom meta
);

if ( empty( $required_user ) ) {

    /* The Users Loop */

    // Customize the args as you need
    $args = array (
        \'role\'    => \'Staff\',
        \'orderby\' => \'post_count\',
        \'order\'   => \'DESC\',
        \'fields\'  => \'all\'
    );
    $user_query = new WP_User_Query( $args );
    if ( ! empty( $user_query->results ) ) { 
        foreach ( $user_query->results as $user ) {
            $profile_url = trailingslashit($page_link) . \'user/\' . $user->user_nicename;
            // This gets ALL the meta fields as a 2 dimensional array (array of arrays)
            $meta_fields = get_user_meta( $user->ID ); 
            ?>
            <div id="user-<?php echo $user->ID ?>">
            <?php
            // An example of custom meta where to save the id of an attachment
            if ( isset($meta_fields[\'photo_id\'][0]) && ! empty($meta_fields[\'photo_id\'][0]) ) {
                echo \'<a href="\' . esc_url($profile_url) . \'/">\';
                echo wp_get_attachment_image( $meta_fields[\'photo_id\'][0], \'medium\' );
                echo \'</a>\';
            }
            ?>
            <h2><?php echo \'<p><a href="\' .esc_url( $profile_url ) . \'/">\' . 
                $user->display_name . \'</a></p>\';?></h2>
            <p><?php echo $meta_fields[\'description\'][0]; ?></p>
            <ul>
            <?php
            foreach ( $wanted_meta as $key ) { 
                if ( isset($meta_fields[$key][0]) && ! empty($meta_fields[$key][0]) ) {
                    ?>
                    <li><?php echo $meta_fields[$key][0]; ?></li>
                <?php } 
            } ?>
            </ul>
            </div>
            <?php
        }
    }

} else {

    /* One User Requested */

    $user = get_user_by( \'slug\', $required_user );
    if ( $user ) {
        ?>
        <div id="user-<?php echo $user->ID ?>">
        <?php
        $meta_fields = get_user_meta( $user->ID );
        if ( isset( $meta_fields[\'photo_id\'][0] ) && ! empty( $meta_fields[\'photo_id\'][0] ) ) {
            echo wp_get_attachment_image( $meta_fields[\'photo_id\'][0], \'full\' );
        }
        ?>
        <h1><?php echo \'<p>\' . $user->display_name . \'</p>\';?></h1>
        <p><?php echo $meta_fields[\'description\'][0]; ?></p>
        <p>
            <a href="<?php echo get_author_posts_url($user->ID); ?>"><?php 
                printf(__(\'See all posts by %s\'), $user->display_name); ?></a> | 
            <a href="<?php echo $page_link; ?>"><?php _e(\'Back to Staff\'); ?></a>
        </p>
        <ul>
        <?php
        foreach ( $wanted_meta as $key ) {
            if ( isset( $meta_fields[$key][0] ) && ! empty( $meta_fields[$key][0] ) ) {
                ?>
                <li><?php echo $meta_fields[$key][0]; ?></li>
                <?php 
            } 
        } ?>
        </ul>
        </div>
        <?php
    }
}
?>

</div><!-- #content -->
</div><!-- #primary -->

<?php get_footer(); ?>
现在创建一个页面并分配此模板。然后将用户角色“staff”分配给您的员工并填写个人资料。

作为最后一次接触author.php 您可以在标题中添加如下内容:

<div class="author-info">
    <?php
    $curauth = ( get_query_var( \'author_name\' ) ) ? 
        get_user_by( \'slug\', get_query_var( \'author_name\' ) ) : 
        get_userdata( get_query_var( \'author\' ) );
    $photo = get_user_meta( $curauth->ID, \'photo_id\', true );
    if ( $photo ) echo wp_get_attachment_image( $photo, \'medium\' );
    ?>
    <h2><?php echo $curauth->display_name; ?></h2>
    <h3><em><?php echo $curauth->user_description; ?></em></h3>
</div>
仅此而已。测试它,改进它,享受它的乐趣。

结束

相关推荐

如何使用GET_USERS获取用户描述?

我正在使用这段代码列出用户及其信息。我的问题是描述没有显示出来。显然,这是因为描述位于“user\\u meta”下,而不是“users”。但我该怎么解决呢?<?php $blogusers = get_users(\'include=2,3,4,5,6,7,8\'); foreach ($blogusers as $user) { echo \'<li>\' . get_avatar($user->I