Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

⌨️ Kuinka lisätä kirjoittajan pudotusvalikko kaikkien artikkelien näytölle WordPressissä

⌨️ Kuinka lisätä kirjoittajan pudotusvalikko kaikkien artikkelien näytölle WordPressissä

Oletusarvoinen "Omat"-suodatin "Kaikki kirjoitukset" -näkymässä WordPressissä näyttää vain kirjautuneen käyttäjän omat kirjoitukset. Tämä toimii niin kauan kuin olet ainoa kirjoittaja. Mutta kun sivustolla työskentelee kolme toimittajaa, viisi avustajaa ja pari vierailevaa asiantuntijaa, sen selvittäminen, kuka kirjoitti mitäkin, muuttuu loputtoman taulukon selaamiseksi.

WordPressin natiivissa käyttöliittymässä ei ole kirjoittajien pudotusvalikkoa päivämäärä- ja kategoria-suodattimien vieressä. Kehittäjät rajasivat näkymän tarkoituksella olettaen, että "Omat"-suodatin riittää ylläpitäjille. Käytännössä tämä on katastrofaalisen riittämätöntä.

Voit lisätä kirjoittajien pudotusvalikon ilman lisäosaa yhdellä siistillä PHP-pätkällä. Koodi kytkeytyy natiiveihin admin-koukkuihin eikä ole ristiriidassa muiden suodattimien kanssa. Kirjoittajien pudotusvalikko toimii yhdessä natiivin "Suodata"-painikkeen kanssa.

💡 Nopea yleiskatsaus:

  • Rekisteröimme admin_init-koukun, jotta koodi toimii vain hallintapaneelissa eikä vaikuta julkiseen puoleen
  • Tulostamme wp_dropdown_users()-funktion restrict_manage_posts-koukun kautta, jotta valintalista ilmestyy suodatinriville päivämäärän ja kategorian viereen
  • Rajaamme toiminta-alan get_current_screen()-funktiolla vain kirjoituksiin ja sivuihin, jättäen mukautetut sisältötyypit koskemattomiksi
  • Valittu kirjoittaja säilyy muistissa get_query_var('author')-funktion avulla ja toimii yhdessä muiden suodattimien kanssa

Miten se toimii konepellin alla

WordPress renderöi suodattimet listanäkymissä restrict_manage_posts-koukun kautta. Se laukeaa juuri ennen "Suodata"-painiketta kirjoitusten ja sivujen taulukossa. Kaikki tämän koukun sisällä tulostettu tulee osaksi suodatinriviä, aivan kuten järjestelmän päivämäärä- ja kategoria-pudotusvalikot.

wp_dropdown_users()-funktio on WordPressin natiivi rajapinta HTML-valintalistan luomiseen käyttäjistä. Se hyväksyy joukon argumentteja: käyttäjälista, oletusarvo, CSS-luokka, ja palauttaa valmiin <select>-elementin. Ei manuaalista merkkausta tai suoria tietokantakyselyitä.

Näiden kahden työkalun yhdistäminen antaa sinulle natiivin käyttöliittymän, jota ei erota sisäänrakennetuista WordPress-suodattimista.

Koodi: kirjoittajien pudotusvalikon lisääminen

Lisää pätkä aktiivisen teeman functions.php-tiedostoon tai koodinpätkät-lisäosan kautta (esimerkiksi Code Snippets). Koodi rekisteröi koukun admin_init-tapahtumaan ja tulostaa kirjoittajien valintalistan kirjoitusten ja sivujen näkymissä.

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}

Mitä kukin osa tekee:

admin_init käynnistää rekisteröinnin vain hallintapaneelissa. Julkinen puoli ei kuormitu lainkaan.

restrict_manage_posts tulostaa valintalistan suodatinriville, juuri sinne missä päivämäärä- ja kategoria-suodattimet sijaitsevat. Pudotusvalikko ilmestyy sekä kirjoitusten että sivujen näkymiin.

$GLOBALS['pagenow'] tarkistaa, että olemme kirjoituslistasivulla (edit.php). Jos käyttäjä siirtyy asetuksiin tai muokkaa tiettyä kirjoitusta, koodi poistuu äänettömästi.

get_current_screen() täsmentää sisältötyypin. Pätkä toimii vain tavallisille post- ja page-tyypeille, ohittaen mukautetut sisältötyypit (cpt). Tämä on tietoinen rajaus: useimmat kolmannen osapuolen lisäosien mukautetut sisältötyypit eivät käytä kirjoittajia sisällön erotteluun.

wp_dropdown_users() luo HTML-valintalistan. 'show_option_all'-argumentti asettaa tekstin "näytä kaikki kirjoittajat" -vaihtoehdolle, 'selected' get_query_var('author')-funktion kautta muistaa valitun käyttäjän suodatuksen jälkeen, ja 'name' => 'author' varmistaa, että WordPress tunnistaa parametrin kirjoittajasuodattimeksi ja käsittelee sen tavallisella kyselyllä.

Kirjoittajat-pudotusvalikko WordPressin Kaikki artikkelit -näkymässä

Koodin lisäämisen jälkeen pudotusvalikko ilmestyy "Kaikki kirjoitukset"- ja "Kaikki sivut" -näkymiin natiivien suodattimien viereen. "Suodata"-painike toimii kuten tavallisesti. Voit suodattaa samanaikaisesti kirjoittajan, päivämäärän ja kategorian mukaan, ja WordPress yhdistää ehdot oikein.

Hienosäätö: mitä voit muuttaa

Pätkä on tarkoituksella minimaalinen, mutta wp_dropdown_users() tukee kymmeniä parametreja. Voit mukauttaa lähes kaiken omaan tilanteeseesi.

Vaihda "Kaikki kirjoittajat" -teksti. Korvaa 'show_option_all' omalla versiollasi, esimerkiksi 'Все авторы' tai 'Любой автор'.

Sulje pois tietyt käyttäjät. 'exclude'-parametri hyväksyy taulukon ID:itä. Hyödyllistä, jos käyttäjien joukossa on järjestelmätilejä, joiden ei pitäisi näkyä listalla:

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

Näytä vain tietyt roolit. 'role__in'-parametri suodattaa käyttäjiä roolien mukaan. Esimerkiksi vain kirjoittajat ja toimittajat:

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

Järjestäminen ei aakkosittain. Oletuksena 'orderby' => 'display_name'. Voit korvata sen arvoilla 'ID', 'user_login' tai 'post_count'. Viimeinen vaihtoehto näyttää aktiivisimmat kirjoittajat ylimpänä.

Lisää muihin sisältötyyppeihin. Poista $screen->id-tarkistus, jolloin pudotusvalikko ilmestyy kaikkiin edit.php-näkymiin, mukaan lukien mukautetut sisältötyypit. Tai lisää tiettyjä mukautettuja sisältötyyppejä ehtoon:

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

⁉️🤔 Usein kysytyt kysymykset

Toimiiko pätkä Gutenbergin ja Classic Editorin kanssa samanaikaisesti?

Kyllä. Koodi ei koske editoria, se muokkaa vain hallinnan listoja, jotka eivät riipu valitusta editorista. Pätkä toimii identtisesti Gutenbergilla, Classic Editorilla ja millä tahansa sivurakentajalla. Testattu WordPress 6.4-6.7 -versioilla Gutenberg aktiivisena ja ilman sitä. restrict_manage_posts-koukku on ollut olemassa versiosta 2.1 lähtien, eikä se ole muuttunut yhteensopivuuden osalta. Koodi toimii kaikissa moderneissa WordPress-versioissa.

Täytyykö välimuisti tyhjentää koodin lisäämisen jälkeen?

Ei. WordPress-koukut rekisteröidään lennossa jokaisella hallintapaneelin pyynnöllä. Päivitä vain kirjoituslistasivu. Jos käytät palvelinpuolen välimuistia (Redis, Varnish), se ei vaikuta hallintapaneeliin, joka on oletuksena välimuistin ulkopuolella.

Voinko lisätä kirjoittajien pudotusvalikon ilman pääsyä functions.php-tiedostoon?

Kyllä, koodinpätkät-lisäosan kautta. Ilmaiset Code Snippets, WPCode tai FluentSnippets toimivat. Lisää koodi PHP-pätkänä automaattikäynnistyksellä, ja se toimii samoin kuin functions.php-tiedostossa. Pätkähallinnan etu on, että koodivirhe ei kaada sivustoa. Lisäosa nappaa vakavan virheen ja poistaa pätkän käytöstä.

Miksi pudotusvalikko ei näy mukautetun sisältötyypin näkymässä?

Pätkä on tarkoituksella rajattu edit-post- ja edit-page-näkymiin. Lisätäksesi mukautetun sisältötyypin laajenna ehtoa $screen->id-tarkistuksessa (katso "Hienosäätö"-osio). Huomaa: mukautetuille sisältötyypeille, jotka on rekisteröity ilman kirjoittajatukea ('supports' => array('author')), kirjoittajasuodatus ei toimi, vaikka pudotusvalikko olisi näkyvissä.

Onko pätkä ristiriidassa lisäosien, kuten Admin Columns tai Adminimize, kanssa?

Ei. Nämä lisäosat toimivat muilla koukuilla ja muokkaavat taulukon sarakkeita, eivät suodatinriviä. restrict_manage_posts lisää valintalistan ennen "Suodata"-painiketta, vyöhykkeelle, johon sarakelisäosat eivät koske. Kolmen vuoden käytön aikana monen kirjoittajan sivustoilla ei ole havaittu yhtään ristiriitaa.

Kannattaako kirjoittajien pudotusvalikko lisätä sivustollesi

Jos sivustolla julkaisee useampi kuin kaksi henkilöä, ehdottomasti kyllä. "Omat"-suodatin näyttää kirjautuneen käyttäjän kirjoitukset, mutta ei anna vaihtaa kollegan artikkeleihin. Kirjoittajien pudotusvalikko paikkaa tämän aukon ilman lisäosia ja ilman tietokantakuormaa. wp_dropdown_users() tekee yhden kyselyn get_users()-funktion kautta, jonka WordPress välimuistittaa.

Yhden hengen blogille suodattimessa ei ole järkeä. Olet joka tapauksessa ainoa kirjoittaja. Mutta heti kun toinen henkilö ilmestyy, välittömästä suodatuksesta säästetty aika maksaa takaisin koodin lisäämiseen käytetyt kolme minuuttia.

Kopioi pätkä functions.php-tiedostoon tai Code Snippetsin kautta, päivitä kirjoituslistasivu ja testaa kirjoittajasuodatusta yhdessä päivämääräsuodattimen kanssa. Jos sinun täytyy mukauttaa roolirakenteeseesi ja sisältötyyppeihisi, role__in-, exclude- ja orderby-parametrit antavat täyden hallinnan listan sisällöstä ilman ylimääräisiä lisäosia.