私は自分のユーザーを検索して返すプラグインを開発しようとしているので、自分に属する他のメタデータを編集することができます。私は出発点として 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>';
}
ブライアンは正しいです。フォームを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">
Brianが述べたように、あなたのフォームはPOSTを通してデータを送り、あなたはGETを通してフェッチしています。 methodを "GET"に変更するか、または$ _POST変数を使用します。 (ただし、POSTとGETの両方が$ _REQUEST変数に取り込まれるため、検索語は現在のコードを使用して渡されます。
検索をワイルドカード(アスタリスク)文字で囲むことで、検索をより柔軟にすることができます。このような何かがトリックをするべきです:
$search = preg_replace( "^$\**(.*)\**$?#", "*$1*", $_REQUEST["s"] );
これにより、検索入力が0個以上の先行/末尾のアスタリスクで送信され、検索文字列の前後に必ず単一のアスタリスクが付きます。