このコードはとてもうまくいきます!問題は、このコードも現在のユーザー(管理者の場合)を隠すことです。だから私がやろうとしているのは現在のユーザーを除くすべての管理者を隠すことです。
私はこれが "$ user_ID"で動作するようにSQLを編集するのに助けが必要
function isa_pre_user_query($user_search) {
$user = wp_get_current_user();
//if (!current_user_can('administrator')) { // Is Not Administrator - Remove Administrator
global $wpdb;
$user_ID = get_current_user_id();
$user_search->query_where =
str_replace('WHERE 1=1',
"WHERE 1=1 AND {$wpdb->users}.ID IN (
SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta
WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}capabilities'
AND {$wpdb->usermeta}.meta_value NOT LIKE '%administrator%')",
$user_search->query_where
);
//}
}
add_action('pre_user_query','isa_pre_user_query');
WordPress VIP開発のベストプラクティス からの引用:
データベースはツールボックスではありません。データベース側で多くの作業を実行できるかもしれませんが、データベースクエリを単純に保ち、必要な計算とロジックをPHPで実行することで、コードのスケールが大幅に向上します。
ただし、そのユーザーに管理者権限がある場合は、管理者以外のすべてのユーザーを取得してから現在のユーザーを結果に追加することをお勧めします。
あなたは簡単にこれをより高いレベルのWordPress機能を使って達成することができます:
<?php
/* get all non-admin users */
$args = array(
'meta_key' => 'wp_capabilities',
'meta_value' => 'Administrator', /* you better check for a capability, not a role */
'meta_compare' => 'NOT LIKE'
);
$user_query = new WP_User_Query( $args );
/* if current user is admin, get its user object */
$current_admin_user = current_user_can( 'activate_plugins' ) ? wp_get_current_user() : null;
/* merge non-admin users with current admin-user */
$results = $user_query->get_results();
$results[] = $current_admin_user;
/* update the user query */
$user_query->__set( 'results', $results );
$user_query->__set( 'total_users', count( $results ));
/* do whatever you want */
print_r($user_query);