web-dev-qa-db-ja.com

管理者以外のアップデート名を削除

管理者以外のユーザーの更新情報を削除または非表示にしようとしています。管理者として、私は見ます:

enter image description here 

私がこれを処理するために見た一般的な答えは使用することを言います:

function hide_update_nag() {
    if ( !current_user_can('update_core') ) {
        remove_action( 'admin_notices', 'update_nag', 3 );
    }
}
add_action( 'admin_head', 'hide_update_nag', 1 );

これは最初のメッセージを削除するのにはうまく働きます(WordPress 4.5.3が利用可能です!今すぐ更新してください)が、2番目のメッセージは管理者以外には見えます:

enter image description here 

両方のメッセージは<div class="update-nag">でラップされているので、 1つのオプション は上記のコードを修正してCSSを使用してタグを隠します。

echo '<style>.update-nag {display: none}</style>';

しかし、これは私にとって不器用に感じます。管理者以外のユーザーに対して、アクションにフックしたり、update nagメッセージをフィルタリングしたり削除したりする方法はありますか?サードパーティのプラグインの推奨事項はありません。

12
j08691

wp-admin/includes/update.phpファイル内

if ( current_user_can('update_core') )
        $msg = sprintf( __('An automated WordPress update has failed to complete - <a href="%s">please attempt the update again now</a>.'), 'update-core.php' );
    else
        $msg = __('An automated WordPress update has failed to complete! Please notify the site administrator.');

メッセージは現在のユーザーロールによって異なり、これはmaintenance_nagです。

基本的に2つの更新名があり、admin-filters.phpにあります。

add_action( 'admin_notices', 'update_nag',      3  );
add_action( 'admin_notices', 'maintenance_nag', 10 );

だから私たちが使用できる2番目のメッセージを削除するには(あなたがこれを管理者以外の人だけにしたい場合は、現在のユーザーロールもチェックしてください)

remove_action( 'admin_notices', 'maintenance_nag', 10 );

マルチサイト用

remove_action( 'network_admin_notices', 'maintenance_nag', 10 );
16
bravokeyl

これが完全なコードで、現時点ではうまくいくようです。

add_action('admin_head', function() {
    if(!current_user_can('manage_options')){
        remove_action( 'admin_notices', 'update_nag',      3  );
        remove_action( 'admin_notices', 'maintenance_nag', 10 );
    }
});
2
T.Todua

@bravokeylはおそらくあなたの当面の問題への最良の答えです。

しかし、次のように対処します。

管理者以外のユーザーに対して、アクションにフックしたり、update nagメッセージをフィルタリングしたり削除したりする方法はありますか?

いいえ。WordPressのNagメッセージは、HTMLをページに出力するadmin_noticesフックに追加される単なるコールバックです。それらは、エラーや成功のメッセージ、あるいはWordPressからの他の「通知」やその他のプラグインやテーマに関するものと実質的に同じです。

CSSでナグを隠すhackyです。プラグイン/テーマによっては誤って.update-nagクラスを使用して目的のスタイルを独自の通知に提供するため、誤検知が発生しやすいです。

それほど煩わしくない方法は、通知を表示したくない各コールバックを明示的に削除することです(管理者以外)。しかし、これはそのリストを維持し、「ネットを滑る」という通知がないことを保証する(おそらく非常に低コスト)ということになります。

1
Stephen Harris