如何创建仅限用户使用的内容(按用户,而不是按角色)

时间:2017-08-10 作者:KreigD

我跟着this guide 开始为我的当前客户端创建基于成员的WordPress站点。

他们经营着一家物业管理公司,需要该网站作为一个门户,将这些建筑的业主和租户与各种示意图联系起来,这些示意图显示了电表和下水道等东西的位置。我遇到的一个大问题是,我尝试过的插件中没有一个允许我将页面或帖子完全限制给一个用户(或几个用户)。

我使用的插件有:成员、导航菜单角色和配置文件生成器(免费版本)。

我很乐意将解决方案编码到我的主题文件中,但老实说,我不确定从哪里开始,或者什么是最好的解决方案(插件、编码或其他什么??)。

更新以澄清,因此将有三个主要角色:管理员、建筑物所有者和建筑物承租人(例如,在露天购物中心经营店铺的人)。

我正在为各种建筑设置页面,以及列出不同服务项目(电气、消防、暖通空调、垃圾等)的帖子。目标是让用户登录并只能看到与其建筑相关的内容。因此,我需要能够以某种方式将这些页面和帖子分配给后端的用户。

我可以根据用户角色轻松完成这项工作,但我需要根据特定用户完成这项工作。

整个网站基本上只面向拥有帐户的用户,理想情况下,一旦网站上线,客户将希望有一种简单的方式来分配自己的访问权限。

1 个回复
最合适的回答,由SO网友:Johansson 整理而成

我们可以在这里为每个帖子创建一个元框,并为其分配一个用户。然后,在我们的帖子页面上,检查当前用户是否与帖子相关。

如果他们与此无关,则将他们重定向回主页或其他地方。

我将使用元框的下拉列表,并用用户填充它。

// Hook into the add_meta_boxes action
add_action( \'add_meta_boxes\', \'kreigd_user_metabox\' );
function kreigd_user_metabox() {
    // Create a new metabox
    add_meta_box( 
        \'kreigd-user-list\',         // ID
        \'User List\',                // Title
        \'kreigd_user_list_callback\',    // Callback
        array(\'post\',\'page\'),       // Post types
        \'normal\', 
        \'high\' 
    );
}
// Output the content for metabox
function kreigd_user_list_callback() {
    // $post is already set, and contains an object: the WordPress post
    global $post;
    $values = get_post_custom( get_the_ID() );
    // Get the current assigned user
    $user_id = isset( $values[\'user_id\'][0] ) ? $values[\'user_id\'][0] : 0;

    // We\'ll use this nonce field later on when saving.
    wp_nonce_field( \'kreigd_nonce\', \'kreigd_user_list_nonce\' );?>
    <p>
        <label for="kreigd_select"><?php _e(\'Choose a user\',\'text-domain\'); ?></label>
        <select name="kreigd_select" id="kreigd_select"><?php 
            $users = get_users(); // Retrieve a list of users
            // Run a loop and add every user to the list
            foreach ( $users as $user ){ ?>
                <option 
                    value="<?php echo esc_html( $user->ID ); ?>"
                    <?php selected( $user->ID, $user_id ); ?>
                >
                    <?php echo esc_html( $user->display_name ); ?>
                </option><?php 
            } ?>
        </select>
    </p><?php    
}
// Save the user to meta box on post save
add_action( \'save_post\', \'mymovieflaws_meta_box_save\' );
function mymovieflaws_meta_box_save( $post_id ){
    // Don\'t save it on autosave
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) 
        return;
    // If the nonce is not correct, or the value is not set, return
    if( !isset( $_POST[\'kreigd_select\'] ) || !wp_verify_nonce( $_POST[\'kreigd_user_list_nonce\'], \'kreigd_nonce\' ) ) 
        return;
    // If current user doesn\'t have the privilege to save a post, return
    if( !current_user_can( \'edit_post\', $post_id ) ) 
        return;
    $allowed = array( \'a\' => array( \'href\' => array() ) );
    // Save the user\'s ID
    update_post_meta( $post_id, \'user_id\', wp_kses( $_POST[\'kreigd_select\'], $allowed ) );      
}
您可以通过使用引导选择来利用这一点,并将搜索选项添加到选择器中。这样,您就可以快速找到每个用户,而无需查看整个列表。

结束

相关推荐

为什么wp_users表中的USER_PASS列是varchar(64)

在处理项目时,我发现“wp\\u users”表中的“user\\u pass”列是varchar(64)。WordPress总是将用户密码存储在md5中,md5是一个32字符的ASCII字符串。那么,为什么不将其存储在具有ascii排序规则的char(32)中呢。我这样问是因为我正在处理一个存储用户密码的表。使用varchar(64)还有其他好处吗。