web-dev-qa-db-ja.com

ユーザープロファイル/カスタムフィールドの追加

こんにちは:私は標準のWordpressのwp-admin/profile.phpページに7つのカスタムフィールドを追加しようとしています。これを行うための簡単なコードを提案するサイトがいくつかあります。例えば:

http://wpengineer.com/2173/custom-fields-wordpress-user-profile/ /

ただし、[経歴情報]ボックスの下と[パスワードの変更]フィールドの上に表示されるように、カスタムフィールドを追加したいと思います。私が読んで試したことはすべて、ページの一番下にカスタムフィールドを配置していますが、[Biographical Info]ボックスと[パスワード変更]フィールドの間に表示するようにします。

これどうやってするの?出来ますか?これにはJavaScriptの使用も含まれますか?お知らせ下さい。ありがとうございました。

3
Steve Doran

ユーザーのバイオとパスワードの間にフィールドを追加するWordPressの方法はありませんが、あなたがあなたの自己を言ったようにあなたはそれをJavaScriptの方法で行うことができます。以下は、同じ方法を実現する方法の例を示すために単一のフィールドを追加するコードです。

注: 以下のコードはフィールドのみを表示しますが、情報を処理したりフィールド値を保存したりすることはありません。その部分は、問題の記事 linked に記載されているのと同じです。

フィールドを追加する

以下のコードをfunctions.phpに配置してフィールドを表示します。

function wpse39285_add_custom_user_profile_fields( $user ) {
?>
    <table id="custom_user_field_table" class="form-table">
        <tr id="custom_user_field_row">
            <th>
                <label for="custom_field"><?php _e('Field', 'your_textdomain'); ?></label>
            </th>
            <td>
                <input type="text" name="custom_field" id="custom_field" value="<?php echo esc_attr( get_the_author_meta( 'custom_field', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description"><?php _e('Please enter your custom_field value.', 'your_textdomain'); ?></span>
            </td>
        </tr>
    </table>
<?php 
}
add_action( 'show_user_profile', 'wpse39285_add_custom_user_profile_fields' );
add_action( 'edit_user_profile', 'wpse39285_add_custom_user_profile_fields' );

上記のコードは、パスワードフィールドの後にカスタムフィールドを配置します。

フィールドを移動する

以下のコードは、ユーザーが自分のプロフィールを表示している場合、または管理者が他のユーザーのプロフィールを編集している場合にのみ、WordPress管理ヘッドにJavaScriptを挿入します。

function wpse39285_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 = $('#custom_user_field_row').remove();
            field.insertBefore('#password');
        });
    </script>
    <?php
}
add_action( 'admin_head', 'wpse39285_field_placement_js' );

上記のJavascriptはパスワードとバイオフィールドの間にフィールドを移動させます。ユーザーがJavascript以外のブラウザからページを表示している場合、フィールドは移動されず、デフォルトのように表示されます。

JavaScript対応ブラウザのあるフィールド

field with javascript enabled browser

非JavaScriptブラウザのあるフィールド

field with javascript disabled browser

4

私のアドバイスは、次のとおりです。システムをゲーム/ハッキングしないでください。コアとなる開発者が望む場所にコンテンツを作成します。あなたがフィールドを正確にそこに持っていることを望む理由はおそらくWordpressの流れを回避するための良いものではないでしょう。

アクションフック profile_personal_options を使用して、必要な設定のための新しいセクションをページに追加します。これは技術的に健全であるだけでなく、ユーザーにとってより明確です(WPが通常どのように見えるかを知っています)。

4
Raphael

私にとってはHameedullah Khanの答えはうまくいきました。私の新しいフィールドがページレイアウトを壊したので、私はほんの少しの修正をしました。だから私は私が追加したjqueryのコードで

jQuery(document).ready(function($) {
            field = $('#custom_user_field_row').remove();
            field.insertBefore('#password');
            $('#custom_user_field_row').wrapAll('<tr><td colspan="2"></td></tr>');
        });

テーブルを揃えます。

0
Ziqurrat

本当にできないので、 Theme My Login pluginを使用することをお勧めします。これは、 "ログイン"、 "ログアウト"、および "プロファイル"ページを作成する単純なメンバープラグインです。あなたのテーマのカスタマイズに合わせてください。あなたはあなたがあなたの子供のテーマに追加することができる個別のファイルであなたが望むようにフィールドの順序を変えることができるでしょう、それで何かがうまくいかなくてもあなたは何の問題もありません。

唯一のことはあなたのプロフィールがuser-edit.phpではなくyour-profile.phpで見えなくなることです。

0
user3206631