it-swarm.com.de

Wie erhalte ich Benutzer-Metas von registrierten Benutzern des Social Login?

Es sieht so aus, als ob Social Login-Plugins (wie Wordpress Social Login, OneAll usw.) keine Benutzer in der ursprünglichen WP-Datenbank als reguläre Registrierung über das Admin-Dashboard erstellen. Daher ist es nicht möglich, Benutzer-Metadaten auf die 'normale' Weise zum aktuellen Benutzer hinzuzufügen oder von diesem abzurufen.

Frage ist: Wie Benutzer-Meta von Social Login registrierten Benutzern zu bekommen?

Ich habe einen aktuellen Fall und habe noch keine Antwort gefunden. Hoffe du kannst mir helfen.

Der Fall In diesem Fall haben wir eine Gravityform, mit der registrierte Benutzer eine neue Seite einreichen können. Wir möchten, dass sie nur eine Seite pro Benutzer senden. Der Seitentitel wird automatisch erstellt und hat die Formulareintrags-ID als eindeutigen Bestandteil des Seitentitels (Einstellungen für Gravityforms). Mit der folgenden Funktion wird Gravityforms zum Erstellen einer Seite anstelle eines Posts verwendet:

add_filter("gform_post_data", "change_post_type", 10, 2);
function change_post_type($post_data, $form){
    //only change post type on form id 1
    if($form["id"] != 2)
       return $post_data;

    $post_data["post_type"] = "page";
    return $post_data;
}

Jetzt möchten wir, dass Benutzer, die das Formular erfolgreich ausgefüllt haben und derzeit angemeldet sind, die URL ihrer erstellten Seite anzeigen, z.

  1. benutzer ist angemeldet und hat eine Seite erstellt -> Seiten-URL anzeigen
  2. benutzer ist angemeldet und hat noch keine Seite erstellt -> Formular anzeigen -> nach Abschluss zu Punkt 1 umleiten
  3. benutzer ist nicht angemeldet -> Schaltflächen für soziale Anmeldung anzeigen -> Nach dem Herstellen der Verbindung zu Punkt 2 umleiten

Zuerst müssen wir die Formulareintrags-ID zur Benutzermeta hinzufügen:

add_action( 'gform_after_submission', 'wpse96480_map_user_to_page', 10, 2);

    function wpse96480_map_user_page( $entry, $form ) {
        $user_id = $entry['created_by'];
        $meta_key = 'generated_page_id';
        $meta_value = $entry['post_id'];
        $unique = true;
        add_user_meta( $user_id, $meta_key, $meta_value, $unique );
    }

Jetzt fügen wir den folgenden Code zur page.php (oder der Seitenvorlagendatei) hinzu, um zu überprüfen, ob der aktuelle Benutzer angemeldet ist und eine Eintrags-ID in user-meta hat, und in diesem Fall die URL mit der Eintrags-ID anzuzeigen:

<?php
    if ( is_user_logged_in() ) {
        global $current_user;
        // $current_user = get_currentuserinfo();
        $user_id = $current_user->ID;
        $meta_key = 'gform_entry_id';
        $single = true;
        $entry_id = get_user_meta( $user_id, $meta_key, $single );
        if( strlen( $entry_id ) > 0 && is_numeric( $entry_id ) ) {
            // we have an entry ID now
            ?>
            <h2>Hey <?php echo $current_user->display_name ?>, thank you for submitting the form. Visit your page here: www.example.com/pagenumber<?php echo( $entry_id ); ?></h2>
            <?php
        } else {
            // we don't have an entry ID for this user
            ?>
            <h2>Hey <?php echo $current_user->display_name ?>, Thank you for joining. To create a page please submit the form below:</h2><?php echo do_shortcode('[gravityform id="2" name="just a form" title="false" description="false"]'); ?>
            <?php
        }
    } else {
        // user is not logged in
        ?>
        <h2><Please log in to create a page <?php do_action( 'wordpress_social_login' ); ?></h2>
        <?php
    }
?>

Das Ergebnis: Wenn ein regulär registrierter WP Benutzer (der von Admin im Admin-Dashboard erstellt wurde) angemeldet ist und das Formular erfolgreich ausfüllt, wird Option (1) als wirksam/erfolgreich angezeigt wir wollten. Wenn der Benutzer das Formular noch nicht ausgefüllt hat, wird Option (2) wirksam/erfolgreich angezeigt.

Das Problem mit Social Login-Benutzern: Wenn ein über ein Social Login-Plugin registrierter Benutzer angemeldet ist und das Formular erfolgreich ausgefüllt hat, wird Option (2) weiterhin angezeigt, als hätte der Benutzer das Formular noch nie ausgefüllt.

Frage: Wie bekomme ich User-Meta von Social Login registrierten Usern? **

2
tobe

Sie geben kein Plugin an, das Sie verwenden. Wenn sich ein Benutzer jedoch mit einer OAuth (die von den meisten sozialen Plattformen verwendet wird) anmeldet, kann er nicht in WordPress angemeldet werden.

Warum?

Ein Benutzer benötigt einen Benutzernamen und Passwort , um sich anzumelden. OAuth (und andere Methoden) geben kein Kennwort an. Sie antworten nur mit Ja, dieser Benutzer ist berechtigt oder Nein, nicht berechtigt .

Die Social Login Plugins benötigen eine Methode, um den Benutzer neu zu identifizieren, wenn er eine neue Seite aus dem Blog anfordert. Sie müssen etwas speichern, das ihnen sagt Dieser Benutzer ist angemeldet . WordPress verwendet ein Cookie. Eine andere Methode ist das Starten einer Sitzung. Eine etwas exotische Methode könnte die Datenbank und die IP-Adresse verwenden. Ich weiß nicht, wie Ihr Social Login-Plugin den Benutzer neu identifiziert, aber dies ist ein wichtiger Punkt, um herauszufinden, warum Ihr Formular nicht funktioniert.

Warum ist der Benutzer nicht mehr angemeldet?

Ich vermute, das Plugin verliert die Verbindung zur Neuidentifizierungsmethode. Bedeutet, dass der Cookie nicht gelesen werden kann oder die Sitzung gestoppt/zerstört wurde.

Mögliche Lösung

Wenn Sie das Formular anzeigen und der Benutzer mit einem sozialen Login angemeldet ist, registrieren Sie einen neuen Benutzer in WordPress und melden Sie diesen Benutzer an. Dies kann ein Dummy-Benutzer sein und benötigt keinen echten Benutzernamen. Überprüfen Sie, ob der aktuelle Benutzer mit einem sozialen Login angemeldet ist, rufen Sie die Benutzerdaten (z. B. Benutzername) ab, erstellen Sie einen Hash aus diesen Benutzerdaten, und verwenden Sie diesen Hash als Benutzername und Passwort. Wenn sich der Benutzer das nächste Mal mit dem sozialen Login anmeldet, schließen Sie sich diesem Prozess an, greifen Sie auf die Benutzerdaten zu, erstellen Sie einen Hash und prüfen Sie, ob ein Benutzer mit diesem Hash existiert.

Sie können auch versuchen, herauszufinden, wie das soziale Login den Benutzer neu identifiziert und warum er nach Fertigstellung des Formulars nicht erneut identifiziert wird.

1
Ralf912