WordPress Aangepaste berichttypen taxonomieën, beheerderskolommen en filters

Voordat je in deze tutorial duikt, doorloop je mijn eerste tutorial over Custom Post Types, waar ik enkele van de belangrijke aspecten van CPT's heb uitgelegd (Custom Post Types). In deze tutorial zullen we meer ontdekken over deze prachtige functie in WordPress.

Deze zelfstudie behandelt hoe aangepaste taxonomieën, beheerderskolommen, taxonomiefilters en een archiefpagina voor uw CPT kunnen worden gemaakt. Laten we beginnen.


Aangepaste taxonomie voor aangepaste berichttypen

Taxonomieën zijn een geweldige manier om dingen samen te groeperen en ons te helpen bij het zoeken naar berichten van een specifieke groep. In WordPress gebruiken we over het algemeen Categorieën en Tags als taxonomieën. De onderstaande stappen leggen uit hoe u aangepaste taxonomieën kunt maken voor uw CPT.

Stap 1: Registreer aangepaste functie

Open uw plug-in bestand, in ons geval Movie-Reviews.php en voeg de volgende code toe om de aangepaste functie te registreren.

add_action ('init', 'create_my_taxonomies', 0);

Stap 2: Implementatie van aangepaste functie en registratie van aangepaste taxonomie

functie create_my_taxonomies () register_taxonomy ('movie_reviews_movie_genre', 'movie_reviews', array ('labels' => array ('name' => 'Filmgenre', 'add_new_item' => 'Nieuw filmgenre toevoegen', 'new_item_name' = > "New Movie Type Genre"), 'show_ui' => true, 'show_tagcloud' => false, 'hierarchical' => true)); 

Hier de register_taxonomy functie doet al het werk van het maken van een aangepaste taxonomie (in ons geval een categorie) met de naam 'movie_reviews_movie_genre'voor het aangepaste berichttype'filmrecensies'. De labels definiëren de verschillende strings die worden gebruikt in de admin-sectie van de taxonomie.

  • 'show_ui' => waar wordt gebruikt om de taxonomie-editor zichtbaar te maken in het dashboard.
  • 'show_tagcloud' => false decoderen of de tagwolk zichtbaar moet zijn. In ons geval is het uitgeschakeld.
  • 'hierarchisch' => waar decodeert het formaat van de aangepaste taxonomie.

Notitie: 'hierarchisch' => false converteert de categorieën in tags.

Stap 3: aangepaste taxonomieën weergeven

Na het opslaan van de Movie-Reviews.php bestand, open uw aangepaste sjabloonbestand, in ons geval single-movie_reviews.php en voeg het volgende toe gemarkeerd code om de categorieën zichtbaar te maken in onze berichten.

 
'movie_reviews',); $ loop = new WP_Query ($ mypost); ?> have_posts ()): $ loop-> the_post ();?>
>
Titel:
Regisseur:
Genre: ID, 'movie_reviews_movie_genre', ");?>
Beoordeling: '; else echo ''; ?>

Stap 4: Het resultaat

Hier hebben we een aangepaste taxonomie 'Filmgenre' toegevoegd in onze filmrecensies CPT. Nu kunnen we nieuwe categorieën toevoegen vanuit het beheerdersdashboard en deze toewijzen aan onze CPT.


Aanvullende kolommen weergeven

Op de pagina met de CPT-lijst van WordPress-beheerders zijn standaard twee kolommen aanwezig - Datum en opmerkingen - waarmee we die CPT-items kunnen sorteren. Voer de onderstaande stappen uit om extra kolommen toe te voegen en te sorteren.

Stap 1: Registreer functie

Open het plug-in bestand Movie-Reviews.php en voeg de volgende regel code toe om een ​​functie te registreren die moet worden aangeroepen wanneer de aanbiedingspagina Filmherzieningen wordt voorbereid.

add_filter ('manage_edit-film_reviews_columns', 'my_columns');

Hier hebben we het variabel filter gebruikt manage_edit- (Custom_Post_Type) _columns, die de kolomlijst van de CPT doorgeeft als een argument voor de functie.

Stap 2: Implementatie van de functie

function my_columns ($ columns) $ columns ['movie_reviews_director'] = 'Regisseur'; $ columns ['movie_reviews_rating'] = 'Beoordeling'; unset ($ columns ['comments']); return $ kolommen; 

Hier hebben we twee kolommen toegevoegd: Regisseur en Beoordeling in het admin panel van de CPT en verwijderde ook de Comments kolom uit de listing.

Stap 3: De kolommen vullen

Registreer een functie om de kolommen te vullen.

add_action ('manage_posts_custom_column', 'populate_columns');

Stap 4: Implementatie

functie populate_columns ($ column) if ('movie_reviews_director' == $ column) $ movie_director = esc_html (get_post_meta (get_the_ID (), 'movie_director', true)); echo $ movie_director;  elseif ('movie_reviews_rating' == $ column) $ movie_rating = get_post_meta (get_the_ID (), 'movie_rating', true); echo $ movie_rating. 'sterren'; 

Hier, aangezien de functie wordt uitgevoerd wanneer een van de CPT-kolommen wordt weergegeven, wordt gecontroleerd of de kolommen die op dat moment zijn aangevraagd voordat ze worden gesequilleerd. We hebben de get_the_ID () functie om de index van de huidige rij op te halen en vervolgens op zijn beurt de get_post_meta om de gegevens in de kolom op te halen.

Stap 5: Registreer kolommen als sorteerbaar

Laten we nu een functie registreren die moet worden aangeroepen wanneer WordPress sorteerbare kolommen identificeert in CPT.

add_filter ('manage_edit-film_reviews_sortable_columns', 'sort_me');

Stap 6: Implementatie

function sort_me ($ columns) $ columns ['movie_reviews_director'] = 'movie_reviews_director'; $ columns ['movie_reviews_rating'] = 'filmracht_rende_rating'; return $ kolommen; 

Deze functie identificeert twee kolommen om ze sorteerbaar te maken en retourneert vervolgens de array. Maar ons werk is nog niet af.

Stap 7: volgorde op aangepast veld

add_filter ('request', 'column_ordering'); add_filter ('request', 'column_orderby'); functie column_orderby ($ vars) if (! is_admin ()) return $ vars; if (isset ($ vars ['orderby']) && 'movie_reviews_director' == $ vars ['orderby']) $ vars = array_merge ($ vars, array ('meta_key' => 'movie_director', 'orderby' = > 'meta_value'));  elseif (isset ($ vars ['orderby']) && 'movie_reviews_rating' == $ vars ['orderby']) $ vars = array_merge ($ vars, array ('meta_key' => 'movie_rating', 'orderby' => 'meta_value_num'));  retourneer $ vars; 

De bovenstaande functie is gekoppeld aan het verzoekfilter en voegt elementen aan de queryarray toe, op basis van de variabelen in de query-URL. Eigenlijk weet WordPress niet hoe te bestellen door de velden 'Movie Director' of 'Movie Rating', dus we moeten WordPress leren hoe dat te doen via deze functie.

We hebben met succes twee sorteerbare kolommen toegevoegd aan de admin-sectie.


Filters maken met aangepaste taxonomie

Hier zullen we zien hoe aangepaste taxonomieën (in dit geval categorieën) kunnen worden gebruikt als een extra filter in de CPT-lijstpagina in de WordPress-beheerder, zodat beheerders CPT-elementen kunnen weergeven die tot een specifieke categorie behoren.

Stap 1: Registreer de functie

Open uw plugin-bestand en voeg de volgende code toe om een ​​functie te registreren die moet worden aangeroepen wanneer WordPress zich voorbereidt om de vervolgkeuzelijst filter weer te geven.

add_action ('restrict_manage_posts', 'my_filter_list');

Stap 2: Implementatie van de functie

function my_filter_list () $ screen = get_current_screen (); globale $ wp_query; if ($ screen-> post_type == 'movie_reviews') wp_dropdown_categories (array ('show_option_all' => 'Show All Movie Genres', 'taxonomy' => 'movie_reviews_movie_genre', 'name' => 'movie_reviews_movie_genre', 'orderby '=>' naam ',' selected '=> (isset ($ wp_query-> query [' movie_reviews_movie_genre '])? $ wp_query-> query [' film_reviews_movie_genre ']:'), 'hierarchical' => false, 'depth '=> 3,' show_count '=> false,' hide_empty '=> true,));

Hier hebben we een globale variabele gebruikt om het type bericht te kennen dat wordt weergegeven en ook een postqueryvariabele om te controleren of er al een bestaand filter is en dienovereenkomstig het filter in te stellen. De wp_dropdown_categories functie wordt gebruikt om alle taxonomieën te tonen die zijn geregistreerd met filmgenres. De 'orderby','SHOW_COUNT','hide_empty','diepte'enz. zijn verschillende argumenten die sorteren specificeren, show items tellen op elke categorie, niet-geassocieerde categorieën verbergen, bepalen welke maximale diepte wordt getoond voor de respectievelijke hiërarchische categorieën.

Stap 3: Toon gefilterde resultaten

Nu nadat de filter-vervolgkeuzelijst is voorbereid, zullen we een code schrijven om de gefilterde resultaten weer te geven. Registreer een functie die moet worden aangeroepen wanneer de query voor het weergeven van berichten wordt voorbereid.

add_filter ('parse_query', 'perform_filtering');

Stap 4: Implementatie van de weergavefunctie

function perform_filtering ($ query) $ qv = & $ query-> query_vars; if (($ qv ['movie_reviews_movie_genre']) && is_numeric ($ qv ['movie_reviews_movie_genre'])) $ term = get_term_by ('id', $ qv ['movie_reviews_movie_genre'], 'movie_reviews_movie_genre'); $ qv ['movie_reviews_movie_genre'] = $ term-> slug; 

De perform_filtering functie ontvangt het huidige WordPress berichtqueryobject en begint dan met het ophalen van een aanwijzer naar de queryvariabelen die zijn opgeslagen in het queryobject. Vervolgens wordt gecontroleerd of een filmgenre deel uitmaakt van de queryvariabelen en vervolgens de query uitvoert.

Nu kunt u het filter gebruiken om de films weer te geven op basis van hun genres.


Last but not least: maak een archiefpagina aan

Omdat we een aangepaste sjabloon voor onze CPT hebben gemaakt, kunnen we ook een aangepaste archiefpagina maken die de standaard archiveringssjabloon overschrijft.

Stap 1: Een terugval toevoegen aan de archiveringssjabloon

Open het plug-in bestand Movie-Reviews.php en de gemarkeerde code toevoegen in de include_template_function functie.

functie include_template_functie ($ template_path) if (get_post_type () == 'movie_reviews') if (is_single ()) // controleert of het bestand al in het thema voorkomt, // serveer anders het bestand van de plug-in als ($ theme_file = locate_template (array ('single-movie_reviews.php'))) $ template_path = $ theme_file;  else $ template_path = plugin_dir_path (__FILE__). '/Single-movie_reviews.php';  elseif (is_archive ()) if ($ theme_file = locate_template (array ('archive-movie_reviews.php'))) $ template_path = $ theme_file;  else $ template_path = plugin_dir_path (__FILE__). '/Archive-movie_reviews.php';  return $ template_path; 

WordPress doorzoekt de themamap voor een archiefsjabloonbestand voordat de standaardmap wordt gebruikt. Deze functie controleert of de gebruiker een archiefsjabloon heeft opgegeven in de themadirectory anders zoekt het naar het bestand in de map van de plug-in.

Stap 2: Maak de archiefsjabloon

Sla het plugin-bestand op en sluit het en maak vervolgens een nieuw bestand met de naam archief-movie_reviews.php en voeg de volgende code erin toe.

 

Filmrecensies

Titel Regisseur
">
max_num_pages) && $ wp_query-> max_num_pages> 1) ?>


Hier hebben we de lus gebruikt om door de berichtinvoeren te bladeren en ze vervolgens weer te geven met behulp van een tabellay-out. We hebben ook een navigatiemenu gedefinieerd als er meer items zijn dan het maximale aantal dat is geconfigureerd onder WordPress-instellingen. Navigatiemenu's worden weergegeven met behulp van de next_post_links en previous_post_links functies.

We hebben de global gebruikt wp_query object met de gegevens over de momenteel uitgevoerde query, om de pagina-inhoud weer te geven. De get_post_meta functie is gebruikt om aangepaste veldgegevens op te halen.

Stap 3: Het resultaat

Sla het bestand op en controleer de archiefpagina voor de archieflijst Movie Reviews.


Hier komen we aan het einde van deze tutorial. Ik hoop dat je de betekenis van aangepaste berichttypen hebt begrepen. Er valt meer te ontdekken, speel er gewoon mee.

Bedankt voor het lezen en voel je vrij om je feedback te geven.