web-dev-qa-db-fra.com

Recherche d'utilisateurs avec le plugin WP_List_Table

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>'; 
}
4
Ken

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">
2
oooorgle

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.

1
Stephen M. Harris