it-swarm.com.de

Fügen Sie unter Eingabefeld Beschreibungstext für neue Profilfelder hinzu

Wie kann ich meinen folgenden Code ändern, um einen Beschreibungstext unter den Eingabefeldern hinzuzufügen? Ich habe versucht, es zu ändern, wie Sie anhand des Facebook-URL-Felds sehen können, aber der Text wird unter der Feldbezeichnung und nicht unter dem tatsächlichen Eingabefeld angezeigt.

function modify_contact_methods($profile_fields) {
    // Add new fields
    $profile_fields['address'] = 'Address';
    $profile_fields['city'] = 'City';
    $profile_fields['state'] = 'State';
    $profile_fields['zipcode'] = 'Zip Code';
    $profile_fields['phone'] = 'Phone Number';
    $profile_fields['fax'] = 'Fax';
    $profile_fields['gplus'] = 'Google+ URL';
    $profile_fields['Twitter'] = 'Twitter URL';
    $profile_fields['facebook'] = 'Facebook URL <br /><span style="clear:both;">Ex: www.facebook.com/username</span>';
    // Remove old fields
    unset($profile_fields['aim']);
    unset($profile_fields['yim']);
    unset($profile_fields['Jabber']);

    return $profile_fields;
}
add_filter('user_contactmethods', 'modify_contact_methods');
2
Rich

Basierend auf gesammelten Informationen HIER und HIER ; Ich konnte etwas zusammenstellen.

Zuerst ... geben Sie Ihren ersten Ansatz auf. Es wird ein Feldwert hinzugefügt, ja. Sie können jedoch kein beschreibendes Feld hinzufügen.

Stattdessen müssen wir ein ganz neues table -Tag in der Struktur erstellen, das von WordPress ausgefüllt wird. Verwenden wir dazu diese Funktion:

function my_custom_user_profile_fields( $user ) {
    ?>
    <table id="facebook_user_field_table" class="form-table">
        <tr id="facebook_user_field_row">
            <th>
                <label for="facebook_field"><?php _e('Facebook URL', 'your_textdomain'); ?></label>
            </th>
            <td>
                <input type="text" name="facebook_field" id="facebook_field" value="<?php echo esc_attr( get_the_author_meta( 'facebook_field', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description"><?php _e('Please enter your Facebook profile url.', 'your_textdomain'); ?></span>
            </td>
        </tr>
    </table>
<?php 
}
add_action( 'show_user_profile', 'my_custom_user_profile_fields' );
add_action( 'edit_user_profile', 'my_custom_user_profile_fields' );

Dadurch wird unser neues tr -Element definiert und mit der erforderlichen Struktur gefüllt. Sie können die Feldbezeichnung und -beschreibung an Ihre Bedürfnisse anpassen.

HINWEIS: Dadurch wird nur unser neues tr -Element erstellt und am unteren Rand des Abschnitts "Über sich selbst" platziert. Um das neue tr -Element an der gewünschten Stelle zu platzieren (dh die "Kontaktinformationen"), müssen wir ein bisschen jQuery verwenden:

function my_facebook_field_placement_js() {
    $screen = get_current_screen();
    if ( $screen->id != "profile" && $screen->id != "user-edit" ) 
    return;
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            field = $('#facebook_user_field_row').remove();
            parent = $('#url').closest('tr');
            field.insertBefore(parent);
        });
    </script>
<?php
}
add_action( 'admin_head', 'my_facebook_field_placement_js' );

Dieser Code übernimmt unser neues Element tr und fügt es VOR dem von WordPress generierten Feld "WEBSITE" hinzu.

HINWEIS: Sehen Sie, wie wir uns hier mit admin_head verbinden? Wir möchten sicherstellen, dass dies nicht auf jeder Admin-Seite ausgeführt wird. Der erste Teil dieses Codeblocks überprüft also die aktuelle Seite und führt den Code nur dann aus, wenn wir uns auf der Profilseite befinden.

Nun ... das ist großartig. Platzierung ist perfekt !! Aber warte ... jetzt werden unsere Daten nicht gespeichert, wenn wir die Felder aktualisieren. Ärgern Sie sich nicht !! Wir haben noch einen Haken dafür:

function my_save_custom_user_profile_fields( $user_id ) {
    if ( !current_user_can( 'edit_user', $user_id ) )
        return FALSE;

    update_user_meta( $user_id, 'facebook_field', $_POST['facebook_field'] );
}
add_action( 'personal_options_update', 'my_save_custom_user_profile_fields' );
add_action( 'edit_user_profile_update', 'my_save_custom_user_profile_fields' );

Dadurch wird das Feld aktualisiert und in der Benutzer-Metatabelle gespeichert. Immer dann, wenn Sie über Ihre Vorlage auf diesen Wert zugreifen müssen. benutze einfach die get_user_meta Funktion.

3
josh