Tabelle dell'elenco degli amministratori di WordPress: aggiungi filtri personalizzati

Pubblicato: 2021-02-26

La maggior parte delle informazioni sulle tue pagine e post nell'amministratore di WordPress è organizzata in tabelle. Chiunque utilizzi WordPress avrà familiarità con questi. Funzionano bene e ti consentono di eseguire "modifiche rapide" di determinate pagine o informazioni sui post, mostrarti la data di pubblicazione del post o della pagina e molto altro ancora. Inoltre potresti aver notato che puoi filtrare queste tabelle con una selezione di menu a tendina che appaiono nella parte superiore di ogni tabella.

Tuttavia, ci sono solo una manciata di filtri. Quindi, cosa fare se si desidera filtrare un valore che non ha una casella di filtro nell'amministratore? Fortunatamente WordPress ci consente di aggiungere i nostri filtri. Vedremo come.

Perché utilizzare filtri personalizzati ?

Quindi, perché esattamente avresti bisogno di filtri personalizzati per organizzare le tabelle di amministrazione in WordPress? Immaginiamo di avere un sito che ha un gran numero di post Autori e molti post.

Ospita il tuo sito web con Pressidium

GARANZIA DI RIMBORSO DI 60 GIORNI

GUARDA I NOSTRI PIANI

Puoi visualizzare l'autore dei post dalla tabella Admin senza alcuna modifica. Quello che non puoi fare attualmente è ordinare i post per autore. Chiaramente questa è una limitazione significativa se si desidera poter visualizzare facilmente tutti i post scritti da un determinato autore. Ciò che aiuterebbe è se potessi visualizzare un menu a discesa di tutti gli autori dei post e quindi selezionarne uno dall'elenco. Questo potrebbe davvero accelerare le cose.

Diamo un'occhiata a come potremmo costruirlo.

Creazione del nostro filtro personalizzato

Per aiutarti a creare i tuoi filtri, WordPress fornisce gli hook restrict_manage_posts e pre_get_posts .

Il restrict_manage_posts viene introdotto nel file wp-admin/includes/class-wp-posts-list-table.php intorno alla riga 557 e viene attivato prima che il pulsante Filtro venga creato sopra l'elenco della tabella di amministrazione.

Useremo una funzione personalizzata e la collegheremo con l'hook restrict_manage_posts come al solito (dai un'occhiata qui per maggiori informazioni su questo). Vai alla cartella principale del tuo tema attivo e apri il file functions.php con il tuo editor preferito. Alla fine del contenuto del file inserire il codice qui sotto:

 function my_author_filter(){ $screen = get_current_screen(); global $post_type; if( $screen->id == 'edit-post' ){ $my_args = array( 'show_option_all' => 'All Authors', 'orderby' => 'display_name', 'order' => 'ASC', 'name' => 'authors_admin_filter', 'who' => 'authors', 'include_selected' => true ); if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); } wp_dropdown_users($my_args); } } add_action('restrict_manage_posts','my_author_filter');

La condizione principale che abbiamo utilizzato è if( $screen->id == 'edit-post') . Qui abbiamo usato la funzione di WordPress get_current_screen() che restituisce l'id dello schermo in cui ci troviamo.

In questo caso, l'ID della schermata dell'amministratore è 'edit-post'. In altre parole, ci assicuriamo di essere nella schermata di amministrazione dei post. Se, ad esempio, volessimo applicarlo alla schermata di amministrazione delle pagine che dovremmo usare if( $screen->id == 'edit-page' o se stessimo lavorando per un tipo di post personalizzato, edit-{post_type} sarebbe l'istruzione if corretta.

Nota: per vedere quale ID corrisponde a ciascuna schermata di amministrazione, puoi consultare la documentazione ufficiale sul riferimento della schermata di amministrazione.

Nel codice sottostante controlliamo se è già selezionato un autore e in tal caso applichiamo il valore selezionato:

 if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); }

Infine, utilizzando la funzione wp_dropdown_users di WordPress genereremo l'elenco a discesa degli autori secondo gli argomenti che abbiamo definito in precedenza.

Successivamente abbiamo scelto il testo che visualizzerà l'opzione 'show-all' nell'argomento show_option_all . Abbiamo scelto la stringa "Tutti gli autori". Nell'argomento 'nome' inseriamo il nome desiderato per l'elenco a discesa. Useremo questo valore in seguito per filtrare i risultati dell'elenco dei post.

Nell'argomento 'chi' definiamo quale tipo di utenti interrogare, nel nostro caso 'autori'. Con l'argomento 'include_selected' scegliamo se vogliamo includere l'ID utente selezionato nell'elenco a discesa.

A questo punto, se aggiorni la schermata dei post dell'amministratore, dovresti vedere il menu a discesa dell'autore accanto agli altri menu di filtro integrati.

Se selezioni un valore e premi “Filtra” il valore rimarrà selezionato al ricaricamento della pagina, ma i risultati rimarranno invariati. Nella fase successiva, apporteremo le modifiche necessarie per filtrare l'elenco dei post per mostrare solo i post collegati all'autore che abbiamo selezionato.

Filtraggio dei risultati

Ancora una volta, il filtro pre_get_posts farà il lavoro. Abbiamo esaminato questo hook nel nostro articolo WordPress Admin Search: Extending the Results. Lo useremo di nuovo per modificare l'oggetto variabile di query che viene creato nella schermata di post amministratore, prima che venga eseguita la query effettiva. Nel tuo functions.php inserisci le seguenti righe:

 function my_author_filter_results($query){ $screen = get_current_screen(); global $post_type; if ( $screen->id == 'edit-post' ) { if(isset($_GET['authors_admin_filter'])){ $author_id = sanitize_text_field($_GET['authors_admin_filter']); if($author_id != 0){ $query->query_vars['author'] = $author_id; } } } } add_action('pre_get_posts','my_author_filter_results');

La condizione principale, come in precedenza, è necessaria anche qui per assicurarci di essere nella schermata dei post di amministrazione.

Il $author_id = sanitize_text_field($_GET['authors_admin_filter']); mantiene l'ID autore selezionato nella variabile $author_id . Dopo questo, e se l'ID dell'autore non è 0 (tutti gli autori sono selezionati), passiamo il valore $author_id nel parametro dell'autore della query.

E questo è tutto. Ora i post mostrati saranno solo quelli che appartengono all'autore/id utente selezionato.

Conclusione

Il filtraggio personalizzato nelle schermate di amministrazione può rendere i tuoi contenuti facilmente ricercabili dagli utenti di amministrazione, cosa che può essere preziosa quando hai molti post o pagine. E, naturalmente, questo è solo un modo possibile di utilizzare un filtro nelle tabelle Admin. Ci sono un sacco di modi alternativi in ​​cui potresti trovarlo utile e, si spera, le tecniche che abbiamo delineato qui ti aiuteranno a creare i tuoi filtri.

Ad esempio, potresti voler creare un menu di filtro a discesa con le opzioni per mostrare i post creati negli ultimi 30 giorni o forse un filtro che ordina i post in base a qualsiasi tassonomia. L'elenco query_vars può aiutarti a fare un brainstorming sulle possibili opzioni!.

Divertiti a giocare con questa fantastica funzionalità!

Guarda anche

Tabelle dell'elenco degli amministratori di WordPress: aggiungi filtri personalizzati
Guida introduttiva ai campi personalizzati di WordPress