J'essaie de créer un plugin qui va rechercher et renvoyer mes utilisateurs afin que je puisse éditer d'autres métatdata qui leur appartiennent. J'utilise le plug-in indiqué sur le Codex comme point de départ.
J'ai ma table apparaissant avec les utilisateurs d'un WP_User_Query. Mais j'ai des problèmes avec le filtrage de la requête avec l'entrée de recherche.
La recherche générique mysearch renverra le tableau correctement, mais le passage à la deuxième page ramène à une recherche vide. La variable de recherche n'est pas placée dans l'URL. Comment puis-je passer cela à l'URL? (la pagination est passée seulement)
Aussi, y a-t-il un moyen de le changer pour que je n'ai pas à physiquement "*" avant et après les paramètres de recherche et que cela soit fait dans le code?
Voici ma requête:
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 );
}
et voici mon champ de recherche:
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>';
}
Brian a raison. Changer le formulaire pour utiliser get à la place de post, puis utiliser $ _REQUEST pour le récupérer devrait fonctionner, et c'est pour moi.
// 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">
Comme Brian l'a noté, votre formulaire envoie les données via POST et vous récupérez via GET. Remplacez méthode par "GET" ou utilisez la variable $ _POST. (Notez cependant que votre terme de recherche est transmis avec votre code actuel, car POST et GET renseignent la variable $ _REQUEST).
Vous pouvez rendre la recherche plus flexible en vous assurant qu'elle est entourée de caractères génériques (astérisque). Quelque chose comme ça devrait faire l'affaire:
$search = preg_replace( "^$\**(.*)\**$?#", "*$1*", $_REQUEST["s"] );
Cela permettra à l'entrée de recherche d'avoir été soumise avec zéro ou plusieurs astérisques précédant/suivant, et garantira que votre chaîne de recherche est précédée et suivie d'un astérisque unique.