it-swarm.com.de

Wie zeige ich ein öffentliches Benutzerprofil mit 2 zusätzlichen Feldern an? (GitHub-Quellcode enthalten)

Als WordPress-Neuling versuche ich, ein Plugin zu erstellen, mit dem Benutzer gezwungen werden, bei der Registrierung und dann ihre Stadt und Geschlecht anzugeben Für jeden Benutzer, der diese Informationen anzeigt, wird eine persönliche Profilseite angezeigt.

Ich habe mein Plugin in GitHub eingecheckt: wp-city-gender.php .

Für den Registrierungsteil habe ich das Anpassen des Registrierungsformulars doc befolgt und es scheint gut zu funktionieren - die zusätzliche Stadt und Felder für das Geschlecht werden im Registrierungsformular angezeigt und später in der Tabelle wp_usermeta gespeichert. Sie können auch im Teil Benutzer des Dashboards bearbeitet werden:

Users screenshot

Außerdem leite ich Kommentatorlinks zu /user/user_id um, indem ich diesen Code verwende:

define('PROFILE', '<a href="/user/%d" rel="external nofollow" class="url">%s</a>');

function get_comment_author_link($cid) {
    global $comment;
    return sprintf(PROFILE, $comment->user_id, $comment->comment_author);
}

add_action('get_comment_author_link',  'get_comment_author_link');

screenshot

Meine Frage lautet: Wie kann ich für jeden Benutzer eine persönliche Profilseite mit seinem Namen und den 2 zusätzlichen Feldern hinzufügen?

Was ich nicht will: Ich kann nicht einfach ein einfaches PHP Skript erstellen, das Daten von wp_usermeta für einen bestimmten numerischen user_id abruft - weil es nicht so wäre Integriert in meiner WordPress-Website , dh das Logo wird oben und die Fußzeile unten nicht angezeigt.

2

Ich denke, ein einfacher Weg, dies zu tun, wäre, die WordPress-Template-Struktur zu nutzen, einen Blick auf Codex: Templates und Codex: Vorlagenhierarchie für einen allgemeinen Überblick. Sie können aber auch die Autorenvorlagen Codex: Autorenvorlagen verwenden, um die author.php-Datei an Ihre Bedürfnisse anzupassen.

Außerdem möchten Sie die Umschreibestruktur für die Autorenvorlage an Ihre Ziele anpassen. Allgemeine Informationen finden Sie unter Codex: Rewrite API und Codex: Class Reference/WP_Rewrite . Abgesehen davon, dass dies hier auf WPSE mehrmals beantwortet wurde, müssen Sie dies nicht duplizieren. Schauen Sie sich also Folgendes an: Zeigen Sie eine registrierte Benutzerprofilseite an und/oder Wie ändere ich die Autorenbasis benutzerdefiniert ohne $ this-> front? .

2
Nicolai

Sie machen einige Annahmen über das WordPresses-Benutzersystem, die falsch sind.

author_link und comment_author_link geben den Wert zurück, den Personen im Feld website beim Hinterlassen eines Kommentars oder in ihrem Benutzerprofil angeben (sofern sie sich angemeldet haben). Diese Felder können auch leer sein, verweisen jedoch praktisch immer auf eine externe Site, wenn sie festgelegt sind.

Es wird in keiner Weise auf eine Profilseite verwiesen, WordPress führt standardmäßig keine Profilseiten aus, weshalb viele Leute Plugins für diese Idee erstellt haben (von einfachen Profilseiten bis hin zu Dingen wie Buddy Press).

Author.php ist ein Archiv für die Beiträge des Autors und ein Benutzer! == author

Wenn Sie öffentliche Benutzerprofilseiten und benutzerdefinierte Felder in Profilen haben möchten, empfehle ich dringend, eines der vielen Plugins zu verwenden, die dafür bereits entwickelt wurden. Das Einrichten ist keine einfache Funktion oder eine schnelle Lösung. Erwarten Sie nicht, dass jemand diese Menge an Arbeit für Sie für +50 Internetpunkte erledigt.

1
aj-adl

Ich habe vor einiger Zeit versucht, mit WordPress eine benutzerdefinierte Formularregistrierung zu erstellen. Ich wollte mehrere benutzerdefinierte Felder registrieren und sie erforderlich machen, also habe ich versucht, das richtige Plugin zu finden, anstatt das Rad neu zu erfinden.

Ich habe ein gutes Plugin namens theme gefunden, mein Login: http://wordpress.org/plugins/theme-my-login/

Sie müssen ein wenig lesen, um dies zu tun, aber zum Glück gibt es eine Dokumentation, die Ihnen auf dieser Website helfen kann:

Hier erfahren Sie, wie Sie zusätzliche Registrierungsfelder hinzufügen können: http://www.jfarthing.com/development/theme-my-login/adding-extra-registration-fields/

Grundsätzlich müssen Sie:

1) Installieren Sie das Plugin

2) Fügen Sie register-form.php in Ihr Theme-Layout ein.

3) Ändere deine Kopie deiner register-form.php

<div class="login" id="theme-my-login<?php $template->the_instance(); ?>">

<?php $template->the_action_template_message( 'register' ); ?>
<?php $template->the_errors();  

?>
<form name="registerform" id="registerform<?php $template->the_instance(); ?>" action="<?php $template->the_action_url( 'register' ); ?>" method="post" autocomplete = "off">

    <input type="text" name="user_login" id="user_login<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( 'user_login' ); ?>" size="20" />
    <input type="text" name="user_email" id="user_email<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( 'user_email' ); ?>" size="20" />
    <input type="text" placeholder="Gender" name="user_gender" id="user_gender<?php $template->the_instance(); ?>" value="<?php $template->the_posted_value( 'user_gender' ); ?>" required />
    <input type="text" placeholder="City" type="text" id="user_city<?php $template->the_instance(); ?>" name="user_city" value="<?php $template->the_posted_value( 'user_city' ); ?>"/>


    <?php do_action( 'register_form' ); ?>

    <p class="submit">
        <input type="submit" name="wp-submit" class="yellow btn1 uppercase right os700" id="wp-submit<?php $template->the_instance(); ?>" value="<?php esc_attr_e( '[ Submit ]' ); ?>" />
        <input type="hidden" name="redirect_to" value="<?php $template->the_redirect_url( 'register' ); ?>" />
        <input type="hidden" name="instance" value="<?php $template->the_instance(); ?>" />
        <input type="hidden" name="action" value="register" />
    </p>
</form>
<?php $template->the_action_links( array( 'register' => false ) ); ?>

Hier können Sie benutzerdefinierte Felder und so viel HTML und CSS ändern und hinzufügen, wie Sie möchten/benötigen.

Dann musst du auf deinem functions.php ein paar Aktionen registrieren, damit wir loslegen können.

So registrieren Sie den Benutzer:

function tml_user_register( $user_id ) {
    if ( !empty( $_POST['user_login'] ) )
        update_user_meta( $user_id, 'user_login', $_POST['user_login'] );
    if ( !empty( $_POST['user_email'] ) )
    update_user_meta( $user_id, 'user_email', $_POST['user_email'] );
    if ( !empty( $_POST['user_gender'] ) )
        update_user_meta( $user_id, 'user_gender', $_POST['user_gender'] );
    if ( !empty( $_POST['user_city'] ) )
        update_user_meta( $user_id, 'user_city', $_POST['user_city'] );

    }

add_action( 'user_register', 'tml_user_register' );`

So zeigen Sie den Inhalt im Dashboard an:

add_action ( 'show_user_profile', 'my_show_extra_profile_fields' );
add_action ( 'edit_user_profile', 'my_show_extra_profile_fields' );

Mit diesen beiden Aktionen können Sie Ihre Benutzerprofile auf Ihrem Dashboard anzeigen, also fügen Sie dies auch in Ihrer functions.php hinzu.

    <?php function my_show_extra_profile_fields ( $user ){ ?>
    <h3>Custom profile information</h3>
    <table class="form-table">
        <tr>
            <th><label for="user_gender"><?php _e('Gender');?></label></th> 
            <td><input type="text" name="user_gender" id="user_gender" value="<?php echo esc_attr( get_the_author_meta( 'user_gender', $user->ID ) ); ?>" /><br /></td>
        </tr>
        <tr>
            <th><label for="user_city"><?php _e('City');?></label></th>
            <td><input type="text" name="user_city" id="user_city" value="<?php echo esc_attr( get_the_author_meta( 'user_city', $user->ID ) ); ?>" /><br /></td>
        </tr>
    </table>

<?php }

Wenn Sie möchten, dass die Benutzer ihre eigenen Informationen aktualisieren, fügen Sie so etwas hinzu (auch in Ihrer functions.php):

add_action ( 'personal_options_update', 'my_save_extra_profile_fields' );
add_action ( 'edit_user_profile_update', 'my_save_extra_profile_fields' );

function my_save_extra_profile_fields( $user_id ){
    if ( !current_user_can( 'edit_user', $user_id ) )
        return false;
    update_usermeta( $user_id, 'user_gender', esc_attr(trim($_POST['user_gender'])) );
    update_usermeta( $user_id, 'user_city', esc_attr(trim($_POST['user_city'])) );

}

Ist ziemlich viel, aber nützlich, probiere es aus, lies die Dokumentation und viel Glück, hoffe das hilft dir.

BEARBEITET

Ok, wenn Sie das Benutzer-Meta anzeigen möchten, können Sie die Datei author.php und die Datei profile-form.php in verwenden den Ordner templates sowie mit den register-form.php anderen Dateien können Sie diese Datei in Ihren Theme-Ordner kopieren und anpassen.

Fügen Sie den folgenden Shortcode hinzu, um das benutzerdefinierte Meta in Ihrem author.php anzuzeigen:

echo do_shortcode('[theme-my-login default_action="profile" show_title="1"]');

Dann können Sie den Inhalt folgendermaßen anzeigen:

echo $profileuser->user_city
echo $profileuser->user_gender
1
Miguel Garrido