これらのフィールドを「プロファイル」セクションから削除する方法は?


16

ユーザーの役割に応じて、[プロフィール]ページからいくつかのプロフィールフィールドを削除する必要があります。カラーピッカーを取り外すために使用しましたremove_action("admin_color_scheme_picker", "admin_color_scheme_picker")。これらのフィールドを削除したい:

  1. ニックネーム
  2. 名前を一般公開
  3. AIM、Yahoo、Googleトーク、自己紹介フィールド
  4. [管理バーを表示]セクションと2つのチェックボックス

ファイル 'user-edit.php'を調べて、許可されているアクション/フィルターがあるかどうかを確認しましたが、ないようです。誰もこれを行う方法を教えてもらえますか?任意の助けをいただければ幸いです。ありがとう

編集: 答えを@helenhousandiに感謝します。しかし、私はすでにこの方法でやっていた。

<?php
add_action('admin_footer-profile.php', 'remove_profile_fields');
function remove_profile_fields()
{
    if(current_user_can('custom_role'))
    { ?>
        <script type="text/javascript">
            jQuery("h3:contains('Personal Options')").next('.form-table').remove();
            jQuery("h3:contains('Personal Options')").remove();
            jQuery("h3:contains('About Yourself')").next('.form-table').remove();
            jQuery("h3:contains('About Yourself')").remove();
        </script>
<?php }
}
?>

私はこれが少し長いことを知っていますが、うまくいきました!@helenhousandiの答えで行くと思います。


これはどこに行くべきですか?functions.php?
ファビアン

はい。functions.phpまたはプラグインファイルに移動できます。フックが正しい限り、どちらの場所からでも機能します。
ラトウィックガンガード

わかりましたが、functions.phpに入れた場合、javascriptを返すにはどうすればよいですか?リターンまたはエコー付き?
ファビアン

WordPressのv4.4.1以降、ニックネームが必要な場となっているようだと示しますERROR:ニックネームを入力してください。この隠されてではなく、人口を持つユーザーを更新するとき、あなたはそれを隠すことができないので、これ以上
icc97

回答:


15

連絡方法フィルターの場合user_contactmethods::

function update_contact_methods( $contactmethods ) {

    unset( $contactmethods['aim'] );
    unset( $contactmethods['jabber'] );
    unset( $contactmethods['yim'] );

    return $contactmethods;

}
add_filter( 'user_contactmethods', 'update_contact_methods' );

ありがとう...これを手に入れた!「管理バーを表示」セクションと「自己紹介」セクションに何かありますか?
ラトウィックガンガード

あなたが解決策を見つけたらこれを更新してください...私はあなたの答えを受け入れています。ありがとう!
ラトウィックガンガード

+1は、PHP経由でフィールドを削除したことを思い出す限り、WordPressがusermetaテーブルに空白のエントリを作成するのを停止するためです。
アシュフェイム

9

けれどもuser_contactmethods、他のフィールドは、ワードプレスで必要とされていないので、フィルターは、ユーザープロファイル画面のためのいくつかの一つであり、あなたはjQueryのを使用することができます.hide()し、.remove()効果的にあなたが情報を保存するという点で、合併症なしにしたくないものを取り除くために。確かに、JSを持たない人はまだそれらを見るでしょうが、それはごく少数であり、そこで変化する情報は実際には何にも影響しないと推測しています。

個人オプション全体を削除する例(管理バーと配色を表示)。私はそれがあなたが正確に探しているものではないことを知っています、ただ私に手元にある簡単な例を与えたいだけです:

// remove personal options block
if( is_admin() ){
    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
    add_action( 'personal_options', 'prefix_hide_personal_options' );
}

function prefix_hide_personal_options() {
  ?>
    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
            $( '#your-profile .form-table:first, #your-profile h3:first' ).remove();
        } );
    </script>
  <?php
}

また、管理バーの表示オプションに関する注意:3.3では、管理バーがヘッダーになっているため、オンまたはオフにできないため、心配する価値はありません。

コード例を更新して、より正確で完全なものにしました。そこにいくつかの残り物がありました。


ありがとう!これは素晴らしい解決策です!私がやったことは似たようなものでしたが、別のアクションフックを使用して、スクリプトがでのみ実行されるようにしましたprofile.php。また、システムで定義された特定のカスタムロールに対してこれを行う必要がありました。質問を回答で更新します。
ラトウィックガンガード

1
以下をjQueryに追加すると、質問からニックネームと「表示名」も非表示になります$("#nickname,#display_name").parent().parent().remove();
。– icc97

edit_user_profileフックを使用することもできます。また、コードを即座に実行するためにjQuery(document).readyメソッドを使用しないでください。このように
-Giraldi

WP v.4.4.1
icc97

2

これに適したphpフックがないように思われるので、CSSでフィールドを非表示にし、JSでそれらを削除しました。

add_action( 'admin_head', 'remove_default_profile_fields' );

function remove_default_profile_fields() {

    global $pagenow;

    if( 'profile.php' != $pagenow) return;

    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );

    // <tr> selectors, each containing a field
    $tr = array(
        "tr.user-rich-editing-wrap",
        "tr.user-comment-shortcuts-wrap",
        "tr.user-first-name-wrap",
        "tr.user-last-name-wrap",
        "tr.user-admin-bar-front-wrap",
        "tr.user-profile-picture",
        "tr.user-user-login-wrap",
        "tr.user-display-name-wrap",
        "h2" // Personally I decided to remove all H2 tags too.
    );

    $selectors = implode(", ", $tr);

    // Hide the fields with css, so even if javascript is disabled they wont show up. 
    echo "<style>{$selectors}{display:none;}</style>"; ?>

    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
           // Remove selected <tr>'s
           $( '<?= $selectors; ?>' ).remove();
           // Remove any empty table that may have been left over
           $(".form-table:not(:has(tr))").remove();
        });
    </script>

  <?php
}

1

wordpressサポートフォーラムから、PHPを使用して削除を行うことができます。これにより、「自分について」セクションが削除されます。

if (! function_exists('remove_plain_bio') ){
    function remove_plain_bio($buffer) {
        $titles = array('#<h3>About Yourself</h3>#','#<h3>About the user</h3>#');
        $buffer=preg_replace($titles,'<h3>Password</h3>',$buffer,1);
        $biotable='#<h3>Password</h3>.+?<table.+?/tr>#s';
        $buffer=preg_replace($biotable,'<h3>Password</h3> <table class="form-table">',$buffer,1);
        return $buffer;
    }

    function profile_admin_buffer_start() { ob_start("remove_plain_bio"); }

    function profile_admin_buffer_end() { ob_end_flush(); }
}
add_action('admin_head', 'profile_admin_buffer_start');
add_action('admin_footer', 'profile_admin_buffer_end');

このコードは、「About Yourself」ヘッダーを「Password」に置き換えてから、それと次のテーブル(パスワードテーブル)の間を取り除きます。

また、プラグインWP Hide Dashboardは、拡張したい場合に同様のjQuery置換を行います。


将来の参照のためにadmin_head-profile.phpadmin_footer-profile.php代わりに使用したい場合があります

1

注意してください!!

1)更新時のように、フィールドの削除は適切でない場合があります。必須フィールドをWORDPRESS更新フックに送信しない場合、それらのフィールドに空の値が設定される可能性があります。(たとえば、フォームの送信中に存在する必要があります<input name="username".../>
私は、「DISPLAY NAME」フィールドと「NICKNAME」フィールドを非表示に.hide();する.remove();
例コードではなくjquery を使用して、視覚的にのみユーザーから非表示にする方が良いと思います

jQuery(document).ready(function( $ ){
    $("#nickname,#display_name").parent().parent().hide();
});

2)管理バーを非表示にするために、ワードプレスメニュー(設定)に特別なオプションがあります。IEなどのカスタムコードの場合

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar()
{
  if (!current_user_can('administrator') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}

0

使用する

add_action('admin_head', 'remove_profile_fields');

そして追加

jQuery(document).ready(function(e) {

JavaScriptの前。


ちょっとした説明は素晴らしいでしょう!
bravokeyl

-4

それらを無効にするフィルターはありません。/wp-admin/user-edit.phpこのようなことをする必要があるときは、ソース()を見てください。JSでそれらを非表示にすることもできますが、それらは引き続き表示でき、値はPOSTで更新されます。

実行可能なオプションは、コアを自分でハックすることだけです。必ず更新を処理し、POSTでこれらのフィールドを無視してください。


はい、私はそのファイルをすでにチェックしました!JSソリューションはあまり安全ではないようです。私に何ができるか見てみましょう!ありがとう!
ラトウィックガンガード

3
あなたが考えることができる唯一の解決策がコアをハックすることであるなら、おそらくあなたはその特定の質問に答えるべきではありません。また、質問者に既に言及したファイルを見るように提案する必要はありません。また、フィルターがまったくないことを述べることも正しくありません-質問と以前の回答を最初に読んでください。
helenhousandi

@helenhousandi xoxo
EarnestoDev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.