Creating user relationships

时间:2017-10-13 作者:nelson

我有一个项目,我觉得我需要在用户之间建立关系,但由于这不是在wordpress中本机实现的,所以我需要关于如何实现的建议。

一个用户将具有代理的自定义角色,而另一个用户将具有订阅者角色。我想在代理和订阅者之间分别创建一对多关系。如何去做这件事是我困惑的地方。

理想情况下,当订阅者登录时,他们可以从其配置文件中的下拉列表中选择代表他们的代理,从而创建关系。此功能仅适用于具有订阅服务器角色的用户。代理无法创建订阅服务器。代理由wordpress管理员手动注册,订阅者使用网站前端的注册表。

对于代理而言,这种关系允许他们查看订户表(名字、姓氏、电子邮件、电话、投资总额等)。代理也只能看到其订阅者。

如果我从头开始创建数据库,我只需为代理创建一个表,为具有代理外键的用户创建另一个表,但wordpress似乎将所有用户放在一个db表中(除非我错了)

问题是,在上述场景中,创建代理-订户关系的最佳方式是什么?我知道这个问题可能会让人觉得含糊不清,而且没有代码,但我希望有经验的人能给我一个想法。

谢谢

EDITFollowing@janh2下面的答案,我已经能够在代理和订阅者之间建立关系。我将展示代码,以便将来对某人有所帮助。

用于添加用户角色的代码

function gtb_add_user_role(){

     add_role(
        \'customer_agent\',
        __(\'Customer Agent\'),
        array(
            \'read\' => true,
            \'level_0\' => true
        )
    );
}
用于添加订阅者自定义字段的代码

//add custom profile fields 
function gtb_add_subscriber_custom_fields($user_id){
    if(current_user_can(\'subscriber\')):
        include(\'subscriber_custom_fields.php\');
    endif;
}
subscriber\\u custom\\u字段中的代码。php(在我将user\\u id设为全局之前无法工作,不知道为什么,但无论如何……)

<?php
global $user_id;
$agent_selection = get_user_meta($user_id,\'customer_agent_rep\',true);
?>
 <table class="form-table">
  <tr>
    <th>
        <label for="subscriber_customer_agent"><?php _e(\'Your Agent\');?></label>
    </th>
    <td>
        <?php 
            $args = array(
                \'role__in\' => array(\'customer_agent\')
            );
            $agents_query = new WP_User_Query($args);

            $customer_agents = $agents_query->get_results();
        ?>
        <select name="subscriber_customer_agent" id="subscriber_customer_agent">
            <option value="0" <?php selected($agent_selection,"0");?> >None</option>
            <?php
                foreach($customer_agents as $customer_agent):
                    $the_agent_number = $customer_agent->ID;
            ?>
                    <option value="<?php echo $customer_agent->ID; ?>" 
<?php selected($agent_selection,$the_agent_number);?>  > <?php echo $the_agent_number." - ". $customer_agent->display_name; ?></option>
            <?php
                endforeach;
            ?>
        </select>
    </td>
</tr>
</table>
保存和更新用户元

 //save or update custom meta
function gtb_save_subscriber_meta($user_id){
    if(current_user_can(\'subscriber\')):
        //check and update agent_rep_meta
        $agent_representative = get_user_meta($user_id,\'customer_agent_rep\',true);
        if(empty($agent_representative)){
            add_user_meta(
                $user_id,
                \'customer_agent_rep\',
                $_POST[\'subscriber_customer_agent\']
            );
        }else{
                update_user_meta(
                    $user_id,
                    \'customer_agent_rep\',
                    $_POST[\'subscriber_customer_agent\']
                );
        }       
    endif;
}
当设置/激活主题时,操作挂钩可启动自定义配置文件字段和用户元。有些动作钩住顶部,有些钩住底部,我还没有完全理解,所以这些钩子中的一些可能是不必要的。更多专家可以进一步解释。

add_action(\'after_setup_theme\',\'gtb_theme_setup\')


function gtb_theme_setup(){
  //add user role
  gtb_add_user_role();
   //hook custom profile fields at the end of the page.
    add_action (\'show_user_profile\',\'gtb_add_subscriber_custom_fields\',10,1);
//save or update  custom meta
    add_action(\'personal_options_update\',\'gtb_save_subscriber_meta\',10,2);

    add_action(\'profile_update\',\'gtb_save_subscriber_meta\',10,2);
    add_action(\'show_user_profile\',\'gtb_save_subscriber_meta\',10,2);
 //code for enqueuing styles and scripts and other theme functions goes here.......

}
@Janh2 answer在代理端更有用,您可以在代理的后端(视图)中创建一个表,您可以使用代码填充一个表。

我希望这篇文章对某人有用。非常感谢:-)

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

WordPress确实为您提供了save meta data for users, 因此,您可以将代理的用户id存储在其订阅者的元字段中,如update_user_meta( $user_id, "agent", $agent_id ).

然后,您可以使用WP_User_Query\'s meta_query, e、 g。

$agents_subscribers = new WP_User_Query( array(
    \'meta_key\' => \'agent\',
    \'meta_value\' => $agent_id
) );

结束

相关推荐

Database Query not working

我一直在关注SteveMarks的一个教程,该教程介绍了如何将帖子中的信息添加到新的Database Table 和往常一样postmeta 一然而,无论我尝试什么,它都不会将信息存储在新表中,有人能看到我的错误吗?教程可在以下位置获得:http://biostall.com/performing-a-radial-search-with-wp_query-in-wordpress 我的帖子类型是festival-event 我将自定义帖子类型的名称与函数中的名称相同,以查看是否遗漏了某些内容。这个SQL