web-dev-qa-db-ja.com

WP_List_Tableプラグインを使ってユーザーを検索する

私は自分のユーザーを検索して返すプラグインを開発しようとしているので、自分に属する他のメタデータを編集することができます。私は出発点として Codex にリストされているプラ​​グインを使用しています。

私のテーブルはWP_User_Queryのユーザーと共に表示されます。しかし、検索入力でクエリをフィルタリングすることに問題があります。

ワイルドカード検索mysearchはテーブルを正しく返しますが、2ページ目に移動すると空白の検索に戻ります。検索変数がURLに配置されていません。これをURLに渡す方法(ページネーションは渡されるだけです)

また、検索パラメーターの前後に物理的に "*"を付けなくてもよくなるように変更してコード内で実行する方法もありますか。

これが私の質問です:

function prepare_items() {
    global $wpdb;

    $searchcol= array(
    'ID',
    'user_email',
    'user_login',
    'user_nicename',
    'user_url',
    'display_name'
    );

    $orderby = !empty($_GET["orderby"]) ? mysql_real_escape_string($_GET["orderby"]) : 'email';
    $order = !empty($_GET["order"]) ? mysql_real_escape_string($_GET["order"]) : 'ASC';

    $args  = array(
    'fields' => 'all_with_meta', 
    'orderby' => $orderby , 
    'order' => $order , 
    'search' =>$_REQUEST["s"] ,
    'search_columns' => $searchcol
    );

    $my_query = new WP_User_Query( $args );
}

これが私の検索フィールドです。

    function my_render_list_table_page(){
    global $my_list_table_sample_page, $wpdb;

    $my_list_table_sample_page->prepare_items();
    <form action="" method="post" >
<?php
   $my_list_table_sample_page->search_box( __( 'Search Users' ), 'user' ); 
   $my_list_table_sample_page->display(); 
   $my_list_table_sample_page->display();
   echo '</form>'; 
}
4
Ken

ブライアンは正しいです。フォームをpostの代わりにgetを使うように変更してから$ _REQUESTを使って取得することでうまくいくはずです。

// Fetch, prepare, sort, and filter our data.
if( isset( $_REQUEST ["s"] ) ){

// Form that displays the table and also contains the search_box()
<form id="table-class-filter" method="get" class="table-class-admin-form">
2
oooorgle

Brianが述べたように、あなたのフォームはPOSTを通してデータを送り、あなたはGETを通してフェッチしています。 methodを "GET"に変更するか、または$ _POST変数を使用します。 (ただし、POSTとGETの両方が$ _REQUEST変数に取り込まれるため、検索語は現在のコードを使用して渡されます。

検索をワイルドカード(アスタリスク)文字で囲むことで、検索をより柔軟にすることができます。このような何かがトリックをするべきです:

$search = preg_replace( "^$\**(.*)\**$?#", "*$1*", $_REQUEST["s"] );

これにより、検索入力が0個以上の先行/末尾のアスタリスクで送信され、検索文字列の前後に必ず単一のアスタリスクが付きます。

1