web-dev-qa-db-ja.com

Adminのusers.phpからすべてのユーザーメタを検索する方法

Admin領域に表示されているユーザーの上部にある検索フォーム(wp-admin/users.php)は制限されており、bio、インスタントメッセンジャーハンドルなどのユーザーメタフィールドのすべてを検索するわけではありません。これを追加できるプラグインを見つけることができました。

誰かが_usermeta DB内のすべての日付についてこの検索を拡張することができる、私が作成できるプラグインまたは関数について知っていますか - 理想的には、プラグインまたは関数によって作成された追加フィールドさえも。

13
John Chandler

私はMikeSchinkelのアプローチと上記の徹底的な説明に本当に感謝しています。これはとても役に立ちました。 pre_user_searchが非推奨になり、3.2では実際には機能しないため、私はそれを機能させることができませんでした。 pre_user_queryでそれを切り替えようとしましたが、それでもうまくいきませんでした。問題は、$ user_search-> search_termが機能しなくなったため、$ _GET ['s']を使用したことです。私はいくらかハッキングして、3.2でこれを機能させることができました。設定する必要があるのは、検索可能なメタデータの配列だけです。

//Searching Meta Data in Admin
add_action('pre_user_query','yoursite_pre_user_search');
function yoursite_pre_user_search($user_search) {
    global $wpdb;
    if (!isset($_GET['s'])) return;

    //Enter Your Meta Fields To Query
    $search_array = array("customer_id", "postal_code", "churchorganization_name", "first_name", "last_name");

    $user_search->query_from .= " INNER JOIN {$wpdb->usermeta} ON {$wpdb->users}.ID={$wpdb->usermeta}.user_id AND (";
    for($i=0;$i<count($search_array);$i++) {
        if ($i > 0) $user_search->query_from .= " OR ";
            $user_search->query_from .= "{$wpdb->usermeta}.meta_key='" . $search_array[$i] . "'";
        }
    $user_search->query_from .= ")";        
    $custom_where = $wpdb->prepare("{$wpdb->usermeta}.meta_value LIKE '%s'", "%" . $_GET['s'] . "%");
    $user_search->query_where = str_replace('WHERE 1=1 AND (', "WHERE 1=1 AND ({$custom_where} OR ",$user_search->query_where);    
}

これが誰かに役立つことを願っています。

4
David

これがワードプレスの最新版の解決策です。

add_action( 'pre_user_query', 'yoursite_pre_user_search'  );
    function yoursite_pre_user_search( $query ) {
        $query->query_where .= "YOUR QUERY '" . str_replace("*", "%", $query->query_vars[ 'search' ] ) . "')";
    }
1

参考までに、このトピックに関する検索(ユーザーパネル検索クエリの調整方法)とこの優れたページの検索のために、WP_User_Searchは3.1以降WP_User_Queryによって非推奨になりました。 http://codex.wordpress.org/Class_Reference/WP_User_Query

1
FredHead