Procurando usuários com o plugin WP_List_Table

4

Estou tentando desenvolver um plug-in que pesquisará e retornará meus usuários para que eu possa editar alguns outros metadados que pertençam a eles. Eu tenho usado o plug-in listado no Codex como meu ponto de partida.

Eu tenho minha tabela aparecendo com os usuários de uma WP_User_Query. Mas estou tendo problemas com a filtragem da consulta com a entrada de pesquisa.

A pesquisa com caracteres curinga mysearch retornará a tabela corretamente, mas a segunda página retornará a uma pesquisa em branco. A variável de pesquisa não está sendo colocada no URL. Como eu passo isso para o URL? (a paginação é passada apenas)

Existe também uma maneira de alterá-lo para que eu não precise fisicamente em "*" antes e depois dos parâmetros de pesquisa e faça isso no código?

Aqui está minha consulta:

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

e aqui está o meu campo de pesquisa:

    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>'; 
}
    
por Ken 31.07.2012 / 17:41

2 respostas

2

Brian está correto. Ao alterar o formulário para usar get em vez de post e, em seguida, usando $ _REQUEST para buscar deve funcionar, e é para mim.

// 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">
    
por oooorgle 30.12.2015 / 11:21
1

Como Brian observou, seu formulário envia os dados via POST e você está buscando via GET. Altere o método para "GET" ou use a variável $ _POST. (Mas observe que seu termo de pesquisa é passado usando seu código atual, porque tanto o POST quanto o GET preenchem a variável $ _REQUEST).

Você pode tornar a pesquisa mais flexível, garantindo que ela seja cercada por caracteres curinga (asterisco). Algo como isso deve fazer o truque:

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

Isso permitirá que a entrada de pesquisa seja enviada com zero ou mais asteriscos iniciais / finais e garantir que sua sequência de pesquisa seja precedida e seguida por um único asterisco.

    
por Stephen M. Harris 05.02.2013 / 03:43