web-dev-qa-db-ja.com

(管理者の)profile.phpからプロフィール写真のオプション(およびその他のもの)を削除する

WordPress 4.4にアップグレードしたところ、adminのユーザーのプロフィールページに気付きました。Gravatarへのリンクを含む「プロフィール写真」というセクションがあります。

私が開発しているプラ​​グインはprofile.phpの多くのことを制限しています。残念ながらjQueryを使ってDOMから削除することで:

jQuery( document ).ready(function() {
    jQuery( "h2:contains('Personal Options')" ).remove();
    jQuery( "h2:contains('Name')" ).remove();
    jQuery( "h2:contains('Contact Info')" ).remove();
    jQuery( "h2:contains('About Yourself')" ).remove();
    jQuery( "h2:contains('Account Management')" ).remove();
    jQuery( "tr.show-admin-bar" ).parents("table:first").remove();
    jQuery( "tr.user-first-name-wrap" ).remove();
    jQuery( "tr.user-last-name-wrap" ).remove();
    jQuery( "tr.user-nickname-wrap" ).remove();
    jQuery( "tr.user-display-name-wrap" ).remove();
    jQuery( "tr.user-url-wrap" ).remove();
    jQuery( "tr.user-description-wrap").parents("table:first").remove();
    jQuery( ".user-sessions-wrap" ).remove();
});

私がjQuery中毒を続ける前に、これをするより良い方法はありますか(出力バッファの置き換えを除いて)?また、ユーザープロフィールの写真用に特別な設定が他にあるか、それともこのjQueryソリューションが今のところ答えになるのでしょうか。

5
C C

show_avatarsオプションを使用して Profile Picture セクションを削除できます。

  • 手動で無効にするには/wp-admin/options.phpにアクセスしてください。

  • またはそれを更新します。

    update_option( 'show_avatars', 0 );
    
  • またはフィルタを介してそれを変更します。

    add_filter( 'option_show_avatars', '__return_false' );
    
  • profile.phpページに制限することもできます。

    add_action( 'load-profile.php', function()
    {
       add_filter( 'option_show_avatars', '__return_false' );
    } );
    
6
birgire

DOMからものを削除しても、それらが本当に削除されるわけではありません。あなたが望むものがより良いGUIであるならそれは有効なテクニックであるかもしれません、しかしあなたが実際に人々がそれらのフィールドでめちゃくちゃになるのを防ぎたいなら(セキュリティの理由で言うことができます)。

たぶんあなたのコードに関するより大きな問題はあなたがテキストを識別しようとしているということです。それはプラグインが英語以外のインストールそして時々英語のインストールのために失敗することを意味します。

次の問題は、他のプラグインが独自のフィールドを追加してページを奇妙な表示にしてしまうことです。

あなたが非常に厳しく管理されたプロフィールページを必要とするならば、あなたはそれを書いて、そしてユーザーにそれだけをアクセスさせるべきです。組み込みのプロファイルページは、さまざまなコンポーネントのアクセス許可を簡単に追加/削除または変更するのに十分なほど柔軟ではありません(これは一般的な説明です。一部のコンポーネントは他のコンポーネントよりも柔軟です)。

1
Mark Kaplun

プロフィールページの特定の部分を削除するためのフックがいくつかあります。さらに、phpを使用してページ出力をバッファしてから関連コンテンツを削除することもできます。

// Remove fields from Admin profile page
if (!function_exists('CCK_remove_profile_options')) {
function CCK_remove_profile_options($subject)
{
    $subject = preg_replace('#<h2>' . __("Personal Options") . '</h2>#s', '', $subject, 1); // Remove the "Personal Options" title
    $subject = preg_replace('#<tr class="user-syntax-highlighting-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Syntax Highlighting" field
    $subject = preg_replace('#<tr class="user-rich-editing-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Visual Editor" field
    $subject = preg_replace('#<tr class="user-comment-shortcuts-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Keyboard Shortcuts" field
    $subject = preg_replace('#<tr class="show-admin-bar(.*?)</tr>#s', '', $subject, 1); // Remove the "Toolbar" field
    //$subject = preg_replace('#<h2>'.__("Name").'</h2>#s', '', $subject, 1); // Remove the "Name" title
    //$subject = preg_replace('#<tr class="user-display-name-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Display name publicly as" field
    $subject = preg_replace('#<h2>' . __("Contact Info") . '</h2>#s', '<h2>' . __("Login Management") . '</h2>', $subject, 1); // Remove the "Contact Info" title
    $subject = preg_replace('#<tr class="user-url-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Website" field
    $subject = preg_replace('#<tr class="user-googleplus-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Google+" field
    $subject = preg_replace('#<tr class="user-Twitter-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Website" field
    $subject = preg_replace('#<tr class="user-facebook-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Website" field
    $subject = preg_replace('#<h2>' . __("Account Management") . '</h2>#s', '', $subject, 1); // Remove the "About Yourself" title
    $subject = preg_replace('#<h2>' . __("About Yourself") . '</h2>#s', '', $subject, 1); // Remove the "About Yourself" title
    $subject = preg_replace('#<h2>' . __("About the user") . '</h2>#s', '', $subject, 1); // Remove the "About Yourself" title
    $subject = preg_replace('#<tr class="user-description-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Biographical Info" field
    //$subject = preg_replace('#<tr class="user-profile-picture(.*?)</tr>#s', '', $subject, 1); // Remove the "Profile Picture" field

    //$subject = preg_replace('#<h3>' . __("User Expiry Information") . '</h3>#s', '', $subject, 1); // Remove the "Expire Users Data" title
    return $subject;
}

function CCK_profile_subject_start()
{
    //if ( /*!*/ current_user_can('manage_options') ) {
    ob_start('CCK_remove_profile_options');
    //}
}

function CCK_profile_subject_end()
{
    //if ( /*!*/ current_user_can('manage_options') ) {
    ob_end_flush();
    //}
}
}
add_action('admin_head', 'CCK_profile_subject_start');
add_action('admin_footer', 'CCK_profile_subject_end');
// Removes ability to change Theme color for the users
remove_action('admin_color_scheme_picker', 'admin_color_scheme_picker'); 
1
Phill Healey

これはそのための簡単な解決策です、より多くのフィールドを隠すためにもっとIDを追加してください

<script type="text/javascript">/* <![CDATA[ */
var hideFields = [ "aim", "yim", "Jabber" ];
jQuery.each( jQuery( "form#your-profile tr" ), function() {
    var field = jQuery( this ).find( "input,textarea,select" ).attr( "id" );
    if ( hideFields.indexOf( field ) != -1 ) {
        jQuery( this ).remove();
    }
});
/* ]]> */</script>

あるいは、 プロファイルフィールドを隠すプラグインを使用することもできます

0
por