Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

⌨️ Kuidas lisada autori rippmenüüd WordPressi kõigi postituste ekraanile

⌨️ Kuidas lisada autori rippmenüüd WordPressi kõigi postituste ekraanile

Vaikimisi filter „Mine" kuvab WordPressi lehel „Kõik postitused" ainult praeguse kasutaja postitusi. See toimib seni, kuni olete ainus autor. Aga kui saidil töötab kolm toimetajat, viis kaasautorit ja paar külaliseksperti, muutub selle leidmine, kes mida kirjutas, lõputuks tabelis kerimiseks.

WordPressi tavaliideses ei ole kuupäeva- ja kategooriafiltrite kõrval autorite rippmenüüd. Arendajad piirasid ekraani teadlikult, eeldades, et administraatoritele piisab filtrist „Mine". Praktikas on see katastroofiliselt ebapiisav.

Saate lisada autorite rippmenüü ilma pluginata, kasutades ühte puhast PHP koodijuppi. Kood haakub natiivsete admin-haakidega ega lähe teiste filtritega vastuollu. Autorite rippmenüü töötab koos natiivse nupuga „Filtreeri".

💡 Kiirülevaade:

  • Registreerime haagi admin_init, nii et kood töötab ainult adminpaneelis ega mõjuta esilehte
  • Väljastame wp_dropdown_users() läbi restrict_manage_posts, nii et valik ilmub filtriritta kuupäeva ja kategooria kõrvale
  • Piirame ulatust get_current_screen() abil ainult postituste ja lehtedega, jättes CPT-d puutumata
  • Valitud autor jäetakse meelde get_query_var('author') kaudu ja see töötab koos teiste filtritega

Kuidas see kapoti all töötab

WordPress renderdab loendiekraanidel filtreid läbi haagi restrict_manage_posts. See käivitub vahetult enne nuppu „Filtreeri" postituste ja lehtede tabelis. Kõik, mis selle haagi sees väljastatakse, muutub filtrirea osaks, täpselt nagu süsteemsed kuupäeva- ja kategooria rippmenüüd.

Funktsioon wp_dropdown_users() on WordPressi natiivne API kasutajatega HTML-valiku genereerimiseks. See võtab vastu argumentide massiivi: kasutajate loend, vaikeväärtus, CSS-klass ja tagastab valmis <select> elemendi. Pole vaja käsitsi märgendust ega otseseid andmebaasipäringuid.

Neid kahte tööriista kombineerides saate natiivse liidese, mis on eristamatu sisseehitatud WordPressi filtritest.

Kood: autorite rippmenüü lisamine

Sisestage koodijupp aktiivse teema faili functions.php või koodijuppide plugina kaudu (näiteks Code Snippets). Kood registreerib haagi sündmusel admin_init ja väljastab autorite valiku postituste ja lehtede ekraanidel.

1add_action('admin_init', 'tsd_author_dropdown_init');
2function tsd_author_dropdown_init() {
3 add_action('restrict_manage_posts', 'tsd_author_dropdown');
4}
5function tsd_author_dropdown() {
6 if ($GLOBALS['pagenow'] !== 'edit.php') {
7 return;
8 }
9 $screen = get_current_screen();
10 if (empty($screen)
11 || ($screen-&gt;id !== 'edit-page' && $screen-&gt;id !== 'edit-post')
12 ) {
13 return;
14 }
15 wp_dropdown_users(array(
16 'show_option_all' => 'All Authors',
17 'selected' => get_query_var('author', 0),
18 'name' => 'author'
19 ));
20}

Mida iga osa teeb:

admin_init käivitab registreerimise ainult adminpaneelis. Esileht on mõjutamata, lisakoormust ei teki.

restrict_manage_posts väljastab valiku filtriritta, täpselt sinna, kus asuvad kuupäeva- ja kategooriafiltrid. Rippmenüü ilmub nii postituste kui ka lehtede ekraanidel.

$GLOBALS['pagenow'] kontrollib, et oleme postituste loendi lehel (edit.php). Kui kasutaja läheb seadetesse või redigeerib konkreetset postitust, lõpetab kood hääletult töö.

get_current_screen() täpsustab sisu tüüpi. Koodijupp töötab ainult standardsete post ja page puhul, jättes vahele kohandatud postitüübid (cpt). See on teadlik piirang: enamik kolmandate osapoolte pluginatest pärit CPT-sid ei kasuta sisu eristamiseks autoreid.

wp_dropdown_users() genereerib HTML-valiku. Argument 'show_option_all' määrab teksti valikule „kuva kõiki autoreid", 'selected' läbi get_query_var('author') jätab meelde valitud kasutaja pärast filtreerimist ning 'name' => 'author' tagab, et WordPress tunneb parameetri ära autorifiltrina ja töötleb seda standardpäringuga.

Autorite rippmenüü WordPressi kõigi postituste ekraanil

Pärast koodi sisestamist ilmub rippmenüü lehtedel „Kõik postitused" ja „Kõik lehed" natiivsete filtrite kõrvale. Nupp „Filtreeri" töötab nagu tavaliselt. Saate samaaegselt filtreerida autori, kuupäeva ja kategooria järgi ning WordPress lõikab tingimusi korrektselt.

Peenhäälestus: mida saate muuta

Koodijupp on tahtlikult minimaalne, kuid wp_dropdown_users() toetab kümneid parameetreid. Saate kohandada peaaegu kõike oma stsenaariumi järgi.

Muutke teksti „Kõik autorid". Asendage 'show_option_all' oma variandiga, näiteks 'Все авторы' või 'Любой автор'.

Välistage konkreetsed kasutajad. Parameeter 'exclude' võtab vastu ID-de massiivi. Kasulik, kui kasutajate hulgas on süsteemseid kontosid, mis ei peaks loendis ilmuma:

1'exclude' => array(1, 15, 23),

Kuvage ainult teatud rolle. Parameeter 'role__in' filtreerib kasutajaid rollide järgi. Näiteks ainult autorid ja toimetajad:

1'role__in' => array('author', 'editor'),

Sorteerimine mitte tähestikuliselt. Vaikimisi 'orderby' => 'display_name'. Saate selle asendada väärtustega 'ID', 'user_login' või 'post_count'. Viimane variant kuvab kõige aktiivsemad autorid eespool.

Lisage teistele postitüüpidele. Eemaldage $screen->id kontroll ja rippmenüü ilmub kõigil edit.php ekraanidel, sealhulgas kohandatud postitüüpidel. Või lisage tingimusse konkreetsed CPT-d:

1$allowed = array('edit-post', 'edit-page', 'edit-product');
2if (!in_array($screen->id, $allowed, true)) {
3 return;
4}

⁉️🤔 Korduma kippuvad küsimused

Kas koodijupp töötab samaaegselt nii Gutenbergi kui ka klassikalise redaktoriga?

Jah. Kood ei puuduta redaktorit, see muudab ainult admin-loendeid, mis ei sõltu valitud redaktorist. Koodijupp töötab identselt nii Gutenbergi, klassikalise redaktori kui ka mis tahes leheehitajaga. Testitud WordPress 6.4-6.7 versioonidel nii aktiivse Gutenbergiga kui ka ilma. Haak restrict_manage_posts on olemas alates versioonist 2.1 ega ole ühilduvuse osas muutunud. Kood töötab igal kaasaegsel WordPressi versioonil.

Kas pärast koodi sisestamist on vaja vahemälu tühjendada?

Ei. WordPressi haagid registreeritakse käigu pealt iga adminpaneeli päringuga. Lihtsalt värskendage postituste loendi lehte. Kui kasutate serveripoolset vahemälu (Redis, Varnish), ei mõjuta see adminpaneeli, mis on vaikimisi vahemällu salvestamisest välja jäetud.

Kas ma saan autorite rippmenüü lisada ilma ligipääsuta failile functions.php?

Jah, koodijuppide plugina kaudu. Tasuta Code Snippets, WPCode või FluentSnippets töötavad. Sisestage kood kui PHP koodijupp automaatse käivitusega ja see töötab samamoodi nagu failis functions.php. Koodijupihalduri eelis on see, et koodiviga ei jooksuta saiti kokku. Plugin püüab kinni saatusliku vea ja keelab koodijupi.

Miks rippmenüüd ei ilmu kohandatud postitüübi ekraanil?

Koodijupp on teadlikult piiratud edit-post ja edit-page ekraanidega. CPT lisamiseks laiendage tingimust $screen->id kontrollis (vt jaotist „Peenhäälestus"). Märkus: CPT-de puhul, mis on registreeritud ilma autoritoeta ('supports' => array('author')), ei tööta autorifiltreerimine isegi siis, kui rippmenüü on olemas.

Kas koodijupp läheb vastuollu pluginatega nagu Admin Columns või Adminimize?

Ei. Need pluginad töötavad teiste haakidega ja muudavad tabeli veerge, mitte filtririda. restrict_manage_posts lisab valiku enne nuppu „Filtreeri", tsooni, mida veergude pluginad ei puuduta. Kolmeaastase kasutamise jooksul mitme autoriga saitidel pole ühtegi konflikti registreeritud.

Kas autorite rippmenüüd tasub oma saidile lisada

Kui saidil avaldab rohkem kui kaks inimest, siis kindlasti jah. Filter „Mine" näitab praeguse kasutaja postitusi, kuid ei võimalda lülituda kolleegi artiklitele. Autorite rippmenüü sulgeb selle lünga ilma pluginateta ja ilma andmebaasi koormuseta. wp_dropdown_users() teeb ühe päringu läbi get_users(), mida WordPress vahemällu salvestab.

Üksiku blogi puhul pole sellel filtrit mõtet. Olete niikuinii ainus autor. Kuid niipea, kui ilmub teine inimene, tasub kohesest filtreerimisest säästetud aeg selle kolme minuti eest, mis kulub koodi sisestamiseks.

Kopeerige koodijupp faili functions.php või läbi Code Snippetsi, värskendage postituste loendi lehte ja kontrollige autorifiltreerimist koos kuupäevafiltriga. Kui teil on vaja kohandada oma rollistruktuuri ja postitüüpidega, annavad parameetrid role__in, exclude ja orderby täieliku kontrolli loendi sisu üle ilma täiendavate pluginateta.