web-dev-qa-db-ja.com

Profile.phpをカスタマイズする

プラグイン "Advanced Custom Fields"を使う: https://wordpress.org/plugins/advanced-custom-fields/ / profile.phpに私のカスタムフィールドを追加することができます。

しかし、profile.phpからデフォルトの要素(個人用オプション、名前など)を削除するにはどうすればいいですか?

ページの外観を変更するために自分の子テーマで新しいテンプレートファイルを作成できることは知っていますが、profile.phpでこれを行う方法が見つかりません。

CSSを使用して要素を非表示にしましたが、これはクラスやIDを持たないタイトルを除いて機能します。また、高度なカスタムフィールドは新しい要素を同じ形式で配置するため、単純にフォーム全体を非表示にすることはできません。

私はカスタマイズされたプロファイル編集ページを手に入れることができるように既存のシステムの上にフロントエンドユーザーアカウントを作成する大きなプラグインから離れたいと思います。

助けてくれてありがとう。

1
SoloCrowd

あなたの目的を達成するためにおそらくいくつかのオプションがあります、以下は私によって示されたオプションの1つです。
(これら2つの機能は互いに属しています)

プラグインやその他のコードスニペットの編集/追加を始める前に、必ずfunctions.phpのコピーを作成してください。

/**
 * Remove fields from an user profile page for all except Administrator
 *
 * FYI {@link https://codex.wordpress.org/Function_Reference/current_user_can}
 *     {@link https://codex.wordpress.org/Roles_and_Capabilities}
 *     {@link https://codex.wordpress.org/Plugin_API/Action_Reference/admin_footer}
 *     {@link https://developer.wordpress.org/reference/hooks/load-pagenow/}
 *
 * Checked with @version WordPress 4.8
 */
add_action('admin_init', 'wpse273289_remove_profile_fields' ); 
function wpse273289_remove_profile_fields()
{ 
    global $pagenow;

    // apply only to user profile or user edit pages
    if( $pagenow !=='profile.php' && $pagenow !=='user-edit.php' )
    {
        return;
    }

    // Make it happen for all except Administrators
    if( current_user_can( 'manage_options' ) )
    {
        return;
    }

    add_action( 'admin_footer', 'wpse273289_remove_profile_fields_js' ); 
}

/**
 * Remove (below)selected fields on user profile
 * This function belongs to the wpse273289_remove_profile_fields function!
 * 
 */
function wpse273289_remove_profile_fields_js()
{
    ?>
    <script>
    jQuery(document).ready( function($) {
        $('input#user_login').closest('tr').remove(); // Username
        $('input#first_name').closest('tr').remove(); // First Name
        $('input#nickname').closest('tr').remove();   // Nickname (required)            
        $('input#email').closest('tr').remove();       // Email (required)
    });
    </script>
    <?php
}

スクリプトの上記のフィールドは単なる例ですので、自分の好みに合わせて調整してください。
両方の機能はローカルのサンドボックスでチェックされ、私のために働いています。

注意:上記はACFプラグインではテストされていませんが、問題にはならないはずです。

1
Charles

他のオプションはそれらの要素を無効/隠すためにcssを使うことです。

まず、ユーザーロールに基づいてボディクラスを追加する関数を追加する必要があります。

function your_prefix_add_admin_body_class( $classes ) {
    $roles = wp_get_current_user()->roles;
    return "$classes ".implode(' ', $roles);
}

add_filter( 'admin_body_class', 'your_prefix_add_admin_body_class' );

そして、あなたの管理者にカスタムCSSを追加します。

function your_prefix_custom_css() {
    echo '<style>
        body:not(.administrator) .user-user-login-wrap,
        body:not(.administrator) .user-first-name-wrap,
        body:not(.administrator) .user-last-name-wrap{
            display: none;
        }
    </style>';
}

add_action('admin_head', 'your_prefix_custom_css');

覚えておいてください、これは最も安全な解決策ではありません。ユーザーが少しCSSを知っている場合、彼はそれを再び有効にすることができます。

0
Juraj.Lorinc