ユーザープロファイルにフィールドを追加するにはどうすればよいですか?たとえば、国、年齢など


21

私はコンピュータ/コードなどがあまり得意ではありません。登録フォームを面白くするプラグインを使用し、そのフォームに国、年齢グループ、性別などを追加しました。wordpressユーザーthingyに登録者を追加するオプションをクリックします。しかし、試してみると、ユーザー名とメールのみがバックエンドの[ユーザー]セクションに表示されます。他のフィールドを[ユーザー]セクションに表示する方法はありますか?

統計的な用途のためにそれらを表示する必要があります。


5
検索してみてください。多数の例があります。
FUXIA

回答:


57

あなたは使用する必要があるshow_user_profileedit_user_profilepersonal_options_update、およびedit_user_profile_updateフックを。

次のコードを使用して、ユーザーセクションにフィールドを追加できます。

ユーザーセクションの編集に追加フィールドを追加するためのコード:

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

function extra_user_profile_fields( $user ) { ?>
    <h3><?php _e("Extra profile information", "blank"); ?></h3>

    <table class="form-table">
    <tr>
        <th><label for="address"><?php _e("Address"); ?></label></th>
        <td>
            <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your address."); ?></span>
        </td>
    </tr>
    <tr>
        <th><label for="city"><?php _e("City"); ?></label></th>
        <td>
            <input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your city."); ?></span>
        </td>
    </tr>
    <tr>
    <th><label for="postalcode"><?php _e("Postal Code"); ?></label></th>
        <td>
            <input type="text" name="postalcode" id="postalcode" value="<?php echo esc_attr( get_the_author_meta( 'postalcode', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your postal code."); ?></span>
        </td>
    </tr>
    </table>
<?php }

データベースに追加フィールドの詳細を保存するためのコード

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

function save_extra_user_profile_fields( $user_id ) {
    if ( !current_user_can( 'edit_user', $user_id ) ) { 
        return false; 
    }
    update_user_meta( $user_id, 'address', $_POST['address'] );
    update_user_meta( $user_id, 'city', $_POST['city'] );
    update_user_meta( $user_id, 'postalcode', $_POST['postalcode'] );
}

また、このテーマに関する役立つと思われるいくつかのブログ投稿もあります。


ブラボーこれは素晴らしい作品。
アヴェブラヒミ

1
これは、DBの追加フィールドのデータを保存していません。提案してください?THX。
b_dubb

@b_dubb、コードを共有してもらえますか?確認してお知らせします。
アルピタフンカ

問題を解決しましたが、お問い合わせいただきありがとうございます。
b_dubb

3

get_user_meta(代わりにget_the_author_meta)を使用することをお勧めします。

function extra_user_profile_fields( $user ) {
    $meta = get_user_meta($user->ID, 'meta_key_name', false);
}

3

高度なカスタムフィールドのProプラグインは、コーディングなしユーザープロファイルにフィールドを追加することができます。


3
プロ版のみ
私は最も愚かな人です

PHPでこれを行う無料の方法があります。
ヨハンプレトリアス

うん-あなたが望むなら、ACFなしでPHPでこれをコーディングすることは間違いなく可能です。私の経験では、100行以上のコードが必要であり、ノンス検証、フォームのHTMLの記述などを心配する必要があります。ACFでのセットアップには5〜10分かかりますが、コーディングには数時間かかります。おそらくプロジェクトで既にACF Proを使用しているかどうかに依存します。
squarecandy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.