web-dev-qa-db-ja.com

ユーザー関係の作成

私は私がユーザー間の関係を作成する必要があると感じるプロジェクトを持っていますが、これは懸念する限りではワードプレスでネイティブに実装されていないので、それを行う方法についてアドバイスが必要になります。

1人のユーザーがエージェントのカスタムロールを持ち、別のユーザーがサブスクライバのロールを持ちます。エージェントとサブスクライバの間にそれぞれ一対多の関係を作りたい。それをどうやって進めるかは私が困惑しているところです。

理想的には、加入者がログインしたときに、加入者は自分のプロファイルのドロップダウンから自分を代表するエージェントを選択し、関係を作成することができます。この機能は、加入者の役割を持つ人々のためだけになります。エージェントは加入者を作成できません。エージェントはワードプレスの管理者によって手動で登録され、購読者はサイトのフロントエンドにある登録フォームを使用します。

エージェントに関しては、この関係により、とりわけ、加入者のテーブル(名、姓、電子メール、電話、投資の総額など)を見ることができます。エージェントは自分の加入者しか見ることができません。

データベースを最初から作成する場合は、単にエージェント用に1つ、エージェント外部キーを持つユーザー用に1つのテーブルを作成しますが、wordpressではすべてのユーザーを1つのdbテーブルにまとめます。

問題は、上記のシナリオで、エージェントと加入者の関係を作成するための最良の方法は何でしょうか。私は質問が曖昧に出くわすかもしれず、コードを持っていないことを知っていますが、私はそのような問題の経験を持つ誰かが私に考えを与えることができると思います。

ありがとう。

編集以下の@ 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_custom_fields.phpのコード(user_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回答はエージェント側でもっと便利です、あなたはテーブルを作成するためにコードを使うことができるエージェントのバックエンド(ビュー)にテーブルを作成することができます。

この貢献が誰かに役立つことを願っています。どうもありがとう :-)

1
nelson

WordPressには、ユーザーのメタデータを保存する機能 が用意されているため 、エージェントのユーザーIDを購読者のメタフィールドに格納することもできます。 update_user_meta( $user_id, "agent", $agent_id )

その後、 WP_User_Queryのmeta_query を使用してこれらのユーザーにクエリを実行できます。

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