過去記事はこちら
header.phpに直接記述する場合
<link rel="canonical" href="<?php echo (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; echo '">';echo "\n"; ?>
過去記事はこちら
header.phpに直接記述する場合
<link rel="canonical" href="<?php echo (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; echo '">';echo "\n"; ?>
管理者以外、例えば編集者にユーザー編集権限を与えた場合、その編集者が管理者を編集(権限変更や削除)ができてしまうので管理者以外はユーザー一覧に管理者を表示させないようにする方法。
function.phpに以下記述 xxxxxxはユーザーネーム
//管理者ユーザーを管理者以外のユーザー一覧から非表示にする--------------------------------
add_action('pre_user_query','site_pre_user_query');
function site_pre_user_query($user_search) {
global $current_user;
$username = $current_user->user_login;
if ($username == 'XXXXXX') {
}
else {
global $wpdb;
$user_search->query_where = str_replace('WHERE 1=1',
"WHERE 1=1 AND {$wpdb->users}.user_login != 'XXXXXX'",$user_search->query_where);
}
}
ユーザー一覧にはユーザー数が表示されるので管理者1名を引いた数を表示させる記述
//管理者以外のユーザー一覧からユーザー数(管理者)を1つ減らす-----------------------------
if (!current_user_can('administrator')) {
add_filter("views_users", "site_list_table_views");
function site_list_table_views($views){
$users = count_users();
$admins_num = $users['avail_roles']['administrator'] - 1;
$all_num = $users['total_users'] - 1;
$class_adm = ( strpos($views['administrator'], 'current') === false ) ? "" : "current";
$class_all = ( strpos($views['all'], 'current') === false ) ? "" : "current";
$views['administrator'] = '<a href="users.php?role=administrator" class="' . $class_adm . '">' . translate_user_role('Administrator') . ' <span class="count">(' . $admins_num . ')</span></a>';
$views['all'] = '<a href="users.php" class="' . $class_all . '">' . __('All') . ' <span class="count">(' . $all_num . ')</span></a>';
return $views;
}
}
通常、ユーザーの追加が行える権限があるのは管理者(administrator)だけだが、編集者(editor)などにユーザーを追加する権限を与えた場合、管理者ユーザーも作成できてしまう。
そこで、編集者に与えたユーザー追加権限には「管理者」など指定した権限を選択できないようにする。
以下、function.phpに記述
コメントアウトで選択肢を選べる
ユーザー追加時の権限制御 admin/user-new.php
//ユーザー追加時に「管理者・編集者・投稿者」を選択できないようにする---------------------
function remove_role_user_new() {
if (!current_user_can('administrator')) {
?><script type="text/javascript">
jQuery(document).ready(function($){
$("option[value='administrator'").remove();//管理者
$("option[value='editor'").remove();//編集者
//$("option[value='author'").remove();//投稿者
//$("option[value='contributor'").remove();//寄稿者
//$("option[value='subscriber'").remove();//購読者
});
</script><?php }
}
add_action( 'admin_head-user-new.php', 'remove_role_user_new' );
ユーザー編集時の権限制御 admin/user-edit.php
//ユーザー編集時に「管理者・編集者・投稿者・寄稿者」を選択できないようにする--------------
function remove_role_user_edit() {
if (!current_user_can('administrator')) {
?><script type="text/javascript">
jQuery(document).ready(function($){
$("option[value='administrator'").remove();//管理者
$("option[value='editor'").remove();//編集者
$("option[value='author'").remove();//投稿者
$("option[value='contributor'").remove();//寄稿者
//$("option[value='subscriber'").remove();//購読者
});
</script><?php }
}
add_action( 'admin_head-user-edit.php', 'remove_role_user_edit' );
ダッシュボードの一般設定でデフォルトの権限グループを制御したい場合
//新規ユーザーのデフォルト権限グループ「管理者・編集者」を選択できないようにする---------
function remove_role_options_general() {
?><script type="text/javascript">
jQuery(document).ready(function($){
$("option[value='administrator'").remove();//管理者
$("option[value='editor'").remove();//編集者
//$("option[value='author'").remove();//投稿者
//$("option[value='contributor'").remove();//寄稿者
//$("option[value='subscriber'").remove();//購読者
});
</script><?php }
add_action( 'admin_head-options-general.php', 'remove_role_options_general' );
どのバージョンからか?WordPress本体の更新通知を非表示にする記述でエラーになる(デバッグモードで)
Notice: Trying to get property 'current' of non-object in
変更前
//本体のアップデート通知を非表示
add_filter("pre_site_transient_update_core", "__return_null");
変更後(下記記述は管理者以外は非表示)
function hide_update_notices() {
if ( !current_user_can( 'administrator' ) ) { //管理者以外は非表示にする
remove_action( 'admin_notices', 'update_nag', 3 );
}
}
add_action( 'admin_init', 'hide_update_notices' );
アドミンバーにある更新アイコンを非表示にする
function hide_adminbar_update_icon() {
if ( !current_user_can( 'administrator' ) ) { //管理者以外は非表示にする
global $wp_admin_bar; $wp_admin_bar->remove_menu( 'updates' );
}
}
add_action( 'wp_before_admin_bar_render', 'hide_adminbar_update_icon' );
まず、post_typeがpost(デフォルト投稿タイプ)で、管理者以外カテゴリーとタグのサブメニュー非表示
function.phpに記述
function hide_taxonomy_from_menu() {
if (!current_user_can('level_10')) {
global $wp_taxonomies;
// カテゴリーの非表示
if ( !empty( $wp_taxonomies['category']->object_type ) ) {
foreach ( $wp_taxonomies['category']->object_type as $i => $object_type ) {
if ( $object_type == 'post' ) {
unset( $wp_taxonomies['category']->object_type[$i] );
}
}
}
// タグの非表示
if ( !empty( $wp_taxonomies['post_tag']->object_type ) ) {
foreach ( $wp_taxonomies['post_tag']->object_type as $i => $object_type ) {
if ( $object_type == 'post' ) {
unset( $wp_taxonomies['post_tag']->object_type[$i] );
}
}
}
return true;
}
}
add_action( 'init', 'hide_taxonomy_from_menu' );
次にpost_typeがsampleのカスタム投稿タイプでカスタムタクソノミーがsample_categoryの場合
function.phpに記述
function remove_product_category_submenu() {
if (!current_user_can('level_10')) {
remove_submenu_page( 'edit.php?post_type=sample', 'edit-tags.php?taxonomy=sample_category&post_type=sample' );
}
}
add_action( 'admin_menu', 'remove_product_category_submenu' );