web-dev-qa-db-ja.com

新しいプロフィールフィールドの入力フィールドの下に説明テキストを追加する

次のコードを変更して、入力フィールドの下に説明テキストを追加する方法を教えてください。あなたがFacebookのURLフィールドで見ることができるように私はそれを修正しようとしました、しかしテキストは実際の入力フィールドではなくフィールドラベルの下に現れます -

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

収集された情報に基づいて HERE および HERE 。私は何かをまとめることができました。

まず…最初のやり方をやめなさい。はい、フィールド値を追加します。しかし、それはあなたが説明的なフィールドを追加することを可能にしません。

代わりに、WordPressから移入される構造内にまったく新しいtableタグを作成する必要があります。そうするために、この関数を使用しましょう:

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' );

それが私たちの新しいtr要素を定義し、それに必要な構造を追加します。必要に応じてフィールドラベルと説明を変更できます。

注:これは私たちの新しいtr要素を作成するだけで、そしてあなた自身についてのセクションの一番下にそれを置くでしょう。新しいtr要素を必要な場所に「配置」するには(つまり、「連絡先情報」)、jQueryを少し使用する必要があります。

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' );

このコードは、私たちの新しいtr要素を受け取り、それをWordPressによって生成される "WEBSITE"フィールドの前に追加します。

注:ここでadmin_headにどのようにフックしているのか参照してください。これがすべての管理ページで実行されないようにしたいです。したがって、このコードブロックの最初の部分は現在のページをチェックし、プロファイルページにいる場合にのみコードを実行します。

今…それは素晴らしいです。配置は完璧です!しかし、待ってください...今、フィールドを更新してもデータが保存されません。しないでください!そのためにもう一つフックがあります。

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' );

これによりフィールドが更新され、ユーザーメタテーブルに格納されます。それから、あなたがあなたのテンプレートからこの値にアクセスする必要がある時はいつでも。 get_user_meta関数を使うだけです。

3
josh