it-swarm.com.de

Suchen von Benutzern mit dem WP_List_Table-Plugin

Ich versuche ein Plugin zu entwickeln, das meine Benutzer sucht und zurückgibt, damit ich einige andere Metadaten bearbeiten kann, die zu ihnen gehören. Ich habe das im Codex aufgeführte Plug-In als Ausgangspunkt verwendet.

Ich habe meine Tabelle mit den Benutzern aus einer WP_User_Query angezeigt. Ich habe jedoch Probleme beim Filtern der Abfrage mit der Sucheingabe.

Die Platzhaltersuche mysearch gibt die Tabelle korrekt zurück, aber wenn Sie zur zweiten Seite gehen, kehren Sie zu einer leeren Suche zurück. Die Suchvariable wird nicht in die URL eingefügt. Wie gebe ich das an die URL weiter? (die Paginierung wird nur übergeben)

Gibt es auch eine Möglichkeit, es so zu ändern, dass ich vor und nach den Suchparametern nicht physisch an "*" muss und es im Code gemacht habe?

Hier ist meine Frage:

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 );
}

und hier ist mein Suchfeld:

    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 ist richtig. Wenn Sie das Formular so ändern, dass es "get" anstelle von "post" verwendet und dann "$ _REQUEST" zum Abrufen verwendet, sollte es funktionieren.

// 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

Wie Brian bemerkte, sendet Ihr Formular die Daten per POST und Sie rufen sie über GET ab. Ändern Sie die Methode in "GET" oder verwenden Sie die Variable "$ _POST". (Beachten Sie jedoch, dass Ihr Suchbegriff mit Ihrem aktuellen Code weitergegeben wird, da sowohl POST als auch GET die Variable $ _REQUEST ausfüllen).

Sie können die Suche flexibler gestalten, indem Sie sicherstellen, dass sie von Platzhalterzeichen (Sternchen) umgeben ist. So etwas sollte den Trick machen:

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

Auf diese Weise können Sie die Sucheingabe mit null oder mehr führenden/nachfolgenden Sternchen senden und sicherstellen, dass der Suchzeichenfolge ein einzelnes Sternchen vorangestellt und gefolgt wird.

1