我有一个项目,我觉得我需要在用户之间建立关系,但由于这不是在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在代理端更有用,您可以在代理的后端(视图)中创建一个表,您可以使用代码填充一个表。
我希望这篇文章对某人有用。非常感谢:-)