2014-05-25 17 views
7

Ho esteso la classe WP_List_Table per visualizzare i record di elenco della tabella database personalizzata. L'elenco ha successo, ma mi sto arrabbiando su come implementare un filtro a discesa per filtrare i miei record di tabella db personalizzati in base alle sue categorie.Come aggiungere un filtro a discesa personalizzato in wordpress WP_List_Table

Si prega di condividere qualsiasi codice per aggiungere il menu a discesa per filtrare i record della tabella del database personalizzato. Il nome del campo è cat_id.

+0

se un esperto ritiene che questa domanda sia incompleta o qualsiasi problema relativo al questionario, si prega di informare, spiegherò di più in base alle esigenze. ma per favore avete bisogno di una soluzione molto veloce. Grazie –

+1

Per favore, Mian, aggiungi la soluzione come *** Risposta *** nella casella sotto. Fai il [Tour] (http://stackoverflow.com/tour) per saperne di più, grazie! Oh, il metodo 'live' è deprecato, vedi i documenti jQuery. – brasofilo

risposta

12

dopo la lotta di 3 ore dopo aver postato la domanda qui, ho esplorato la classe e ho trovato la soluzione, quindi sto condividendo le informazioni qui.

C'è un extra_tablenav Funzione ($ che), sovrascrivo che funzione con la mia funzione,

function extra_tablenav($which) { 
    global $wpdb, $testiURL, $tablename, $tablet; 
    $move_on_url = '&cat-filter='; 
    if ($which == "top"){ 
     ?> 
     <div class="alignleft actions bulkactions"> 
     <?php 
     $cats = $wpdb->get_results('select * from '.$tablename.' order by title asc', ARRAY_A); 
     if($cats){ 
      ?> 
      <select name="cat-filter" class="ewc-filter-cat"> 
       <option value="">Filter by Category</option> 
       <?php 
       foreach($cats as $cat){ 
        $selected = ''; 
        if($_GET['cat-filter'] == $cat['id']){ 
         $selected = ' selected = "selected"'; 
        } 
        $has_testis = false; 
        $chk_testis = $wpdb->get_row("select id from ".$tablet." where banner_id=".$cat['id'], ARRAY_A); 
        if($chk_testis['id'] > 0){ 
       ?> 
       <option value="<?php echo $move_on_url . $cat['id']; ?>" <?php echo $selected; ?>><?php echo $cat['title']; ?></option> 
       <?php 
        } 
       } 
       ?> 
      </select> 
      <?php 
     } 
     ?> 
     </div> 
     <?php 
    } 
    if ($which == "bottom"){ 
     //The code that goes after the table is there 

    } 
} 

e poi saltò in prepare_items function() e ha aggiunto una riga dopo stringa di query,

if($_GET['cat-filter'] > 0){ 
      $query = $query . ' where cat_id=' . $_GET['cat-filter']; 
     } 
non

finito qui, ho aggiunto alcune righe di javascript per eseguire discesa,

$('.ewc-filter-cat').live('change', function(){ 
    var catFilter = $(this).val(); 
    if(catFilter != ''){ 
     document.location.href = 'admin.php?page=ewc-testimonial'+catFilter;  
    } 
}); 

e il suo funzionamento fresco e fine, se qualcuno ha bisogno di ulteriore aiuto, commenta qui.

Grazie per il tempo.

+0

scusa per l'utilizzo del metodo live di jQuery, dovresti usare l'approccio raccomandato come menzionato nel commento sopra di brasofilo. –

+0

come si fa con il pulsante del filtro? –

+0

Assicurati di avvolgere tutto ciò che sta andando direttamente da '$ _GET' in una query nella funzione' mysql_real_escape_string', altrimenti ti lasci aperto a SQL injection. – jsonfry

Problemi correlati