it-swarm.com.de

Benutzerbeziehungen erstellen

Ich habe ein Projekt, in dem ich das Gefühl habe, Beziehungen zwischen Benutzern herstellen zu müssen, aber da dies in WordPress nicht nativ implementiert ist, benötige ich Ratschläge dazu.

Ein Benutzer hat die benutzerdefinierte Rolle des Agenten, während ein anderer Benutzer die Rolle des Abonnenten hat. Ich möchte eine Eins-zu-Viele-Beziehung zwischen Agent und Abonnent herstellen. Wie es geht, ist, wo ich ratlos bin.

Wenn sich ein Abonnent anmeldet, kann er im Idealfall den Agenten, der ihn repräsentiert, aus einem Dropdown-Menü in seinem Profil auswählen und die Beziehung erstellen. Diese Funktionalität wird nur für Personen mit der Rolle des Abonnenten. Ein Agent kann keinen Abonnenten erstellen. Agenten werden manuell von WordPress-Administratoren registriert, Abonnenten verwenden das Registrierungsformular am vorderen Ende der Website.

In Bezug auf Agenten können sie unter anderem eine Tabelle ihrer Abonnenten anzeigen (Vorname, Nachname, E-Mail, Telefon, Gesamtinvestitionswert usw.). Agenten können auch nur ihre Abonnenten sehen.

Wenn ich eine Datenbank von Grund auf neu erstellen würde, würde ich einfach eine Tabelle für Agenten erstellen, eine andere für Benutzer mit einem Agenten-Fremdschlüssel, aber WordPress scheint alle Benutzer in eine DB-Tabelle zu setzen (es sei denn, ich liege falsch).

Die Frage ist, wie im obigen Szenario die Agent-Abonnenten-Beziehung am besten erstellt werden kann. Ich weiß, dass die Frage möglicherweise vage ist und keinen Code enthält, aber ich hoffe, dass mir jemand mit Erfahrung in Bezug auf ein solches Problem eine Idee geben kann.

Vielen Dank.

BEARBEITEN Nach der @ janh2-Antwort unten konnte eine Beziehung zwischen Agent und Abonnent hergestellt werden. Ich werde den Code zeigen, damit er in Zukunft jemandem helfen kann.

Code zum Hinzufügen einer Benutzerrolle

function gtb_add_user_role(){

     add_role(
        'customer_agent',
        __('Customer Agent'),
        array(
            'read' => true,
            'level_0' => true
        )
    );
}

code zum Hinzufügen von benutzerdefinierten Teilnehmerfeldern

//add custom profile fields 
function gtb_add_subscriber_custom_fields($user_id){
    if(current_user_can('subscriber')):
        include('subscriber_custom_fields.php');
    endif;
}

code in subscriber_custom_fields.php (konnte nicht funktionieren, bis ich user_id global gemacht habe, weiß nicht warum, aber trotzdem ...)

<?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>

Benutzer-Meta speichern und aktualisieren

 //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;
}

Aktions-Hooks zum Initiieren von benutzerdefinierten Profilfeldern und Benutzer-Metas beim Einrichten/Aktivieren des Themas. Einige Aktions-Hooks werden oben und einige unten angehängt. Einige dieser Hooks sind noch nicht vollständig verstanden, sodass sie möglicherweise nicht erforderlich sind. Weitere Experten können dies erklären des Weiteren.

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 Antwort ist auf der Agentenseite nützlicher. Sie können eine Tabelle im Backend (Ansicht) des Agenten erstellen, in der Sie den Code zum Auffüllen einer Tabelle verwenden können.

Ich hoffe, dieser Beitrag ist für jemanden nützlich. Danke vielmals :-)

1
nelson

WordPress bietet Ihnen die Möglichkeit, Metadaten für Benutzer zu speichern , sodass Sie einfach die Benutzer-ID des Agenten in einem Metafeld seiner Abonnenten wie update_user_meta( $user_id, "agent", $agent_id ) speichern können.

Sie können diese Benutzer dann mit der WP_User_Query-Metaabfrage abfragen, z.

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