Tabelele cu liste de administratori WordPress: Adăugați filtre personalizate

Publicat: 2021-02-26

Majoritatea informațiilor de pe paginile și postările tale din Administratorul WordPress sunt organizate în tabele. Oricine folosește WordPress va fi familiarizat cu acestea. Ele funcționează bine și vă permit să efectuați „Editări rapide” ale anumitor informații despre pagină sau postare, să vă arătăți data la care postarea sau pagina a fost publicată și multe altele, în plus. În plus, s-ar putea să fi observat că puteți filtra aceste tabele cu o selecție de meniuri drop-down care apar în partea de sus a fiecărui tabel.

Există însă doar câteva filtre. Deci, ce faceți dacă doriți să filtrați o valoare care nu are o casetă de filtrare în Admin? Din fericire, WordPress ne permite să adăugăm propriile filtre. O să vedem cum.

De ce să folosiți filtre personalizate ?

Deci, de ce ați avea nevoie exact de filtre personalizate pentru organizarea tabelelor de administrare în WordPress? Să ne imaginăm că avem un site care are un număr mare de postări și o mulțime de postări.

Găzduiește-ți site-ul web cu Pressidium

GARANTIE 60 DE ZILE BANI RAPIS

VEZI PLANUL NOSTRU

Puteți vizualiza autorul postărilor din tabelul de administrare fără nicio modificare. Ceea ce nu puteți face în prezent este să sortați postările după autor. În mod clar, aceasta este o limitare semnificativă dacă doriți să puteți vizualiza cu ușurință toate postările scrise de un anumit autor. Ceea ce ar ajuta este dacă ați putea vizualiza un meniu drop-down cu toți autorii postărilor și apoi ați selecta unul din listă. Asta chiar ar putea accelera lucrurile.

Să aruncăm o privire la cum am putea construi asta.

Crearea filtrului nostru personalizat

Pentru a vă ajuta să vă construiți propriile filtre, WordPress oferă cârligele restrict_manage_posts și pre_get_posts .

restrict_manage_posts este introdus în fișierul wp-admin/includes/class-wp-posts-list-table.php în jurul liniei 557 și se declanșează înainte ca butonul Filtrare să fie creat deasupra listei tabelului de administrare.

Vom folosi o funcție personalizată și o vom conecta cu restrict_manage_posts , ca de obicei (aruncă o privire aici pentru mai multe informații despre aceasta). Accesați folderul principal al temei active și deschideți fișierul functions.php cu editorul preferat. La sfârșitul conținutului fișierului introduceți codul de mai jos:

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

Condiția principală pe care am folosit-o este if( $screen->id == 'edit-post') . Aici am folosit funcția get_current_screen() WordPress care returnează ID-ul ecranului pe care ne aflăm.

În acest caz, ID-ul ecranului de administrator este „edit-post”. Cu alte cuvinte, ne asigurăm că suntem pe ecranul de administrare a postărilor. Dacă, de exemplu, dorim să aplicăm acest lucru ecranului de administrare a paginilor, ar trebui să folosim if( $screen->id == 'edit-page' sau dacă lucram pentru un tip de postare personalizat, edit-{post_type} ar fi afirmația corectă if.

Notă: Pentru a vedea ce ID corespunde fiecărui ecran de administrare, puteți verifica documentația oficială despre referința ecranului de administrare.

În codul de mai jos verificăm dacă un autor este deja selectat și dacă da, aplicăm valoarea selectată:

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

În cele din urmă, utilizând funcția wp_dropdown_users WordPress vom genera lista derulantă a autorilor conform argumentelor pe care le-am definit anterior.

Apoi am ales textul care va afișa opțiunea „show-all” în argumentul show_option_all . Am ales șirul „Toți autorii”. În argumentul „nume” completăm numele dorit pentru lista derulantă. Vom folosi această valoare mai târziu pentru a filtra rezultatele listei de postări.

În argumentul „cine” definim ce tip de utilizatori să interogăm, în cazul nostru „autori”. Cu argumentul „include_selected” alegem dacă dorim să includem ID-ul utilizatorului selectat în lista derulantă.

În acest moment, dacă reîmprospătați ecranul postărilor de administrator, ar trebui să vedeți meniul derulant al autorului lângă celelalte meniuri de filtre încorporate.

Dacă selectați o valoare și apăsați „Filtrare”, valoarea va rămâne selectată la reîncărcarea paginii, dar rezultatele vor rămâne neschimbate. În următorul nostru pas, vom face modificările necesare pentru a filtra lista de postări pentru a afișa numai postările legate de autorul selectat.

Filtrarea rezultatelor

Încă o dată, filtrul pre_get_posts va face treaba. Am examinat acest cârlig în articolul nostru WordPress Admin Search: Extinderea rezultatelor. Vom folosi acest lucru din nou pentru a modifica obiectul variabilă de interogare care este creat în ecranul post-administrator, înainte ca interogarea reală să fie executată. În functions.php dumneavoastră.php introduceți următoarele rânduri:

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

Condiția principală, ca și anterior, este necesară și aici pentru a ne asigura că suntem pe ecranul postărilor de administrator.

$author_id = sanitize_text_field($_GET['authors_admin_filter']); păstrează ID-ul autorului selectat în variabila $author_id . După aceasta, și dacă id-ul autorului nu este 0 (Toți autorii sunt selectați), trecem valoarea $author_id în parametrul autor al interogării.

Si asta e. Acum postările afișate vor fi doar cele care aparțin ID-ului de autor/utilizator selectat.

Concluzie

Filtrarea personalizată în ecranele Admin poate face conținutul dvs. ușor de căutat de către utilizatorii Administratori, lucru care poate fi neprețuit atunci când aveți o mulțime de postări sau pagini. Și, desigur, aceasta este doar o modalitate posibilă de a utiliza un filtru în tabelele de administrare. Există o mulțime de moduri alternative în care s-ar putea să-l găsiți util și, sperăm, că tehnicile pe care le-am subliniat aici vă vor ajuta să vă creați propriile filtre.

De exemplu, ați putea dori să creați un meniu de filtru derulant cu opțiuni pentru a afișa postările create în ultimele 30 de zile sau poate un filtru care sortează postările după orice taxonomie. Lista query_vars vă poate ajuta să faceți brainstorming posibile opțiuni!.

Distrează-te jucându-te cu această caracteristică grozavă!

Vezi si

Tabelele cu liste de administratori WordPress: Adăugați filtre personalizate
Noțiuni introductive cu câmpurile personalizate WordPress