Bejegyzések szűrése WordPress-ben kategória szerint előnézeti képe

Bejegyzések szűrése WordPress-ben kategória szerint

| Olvasási idő: 1 perc

Ha már rendeltünk egyedi taxonómiát az egyedi bejegyzéstípusunkhoz, praktikus lenne ez alapján szűrni őket - ez a snippet pedig ebben lesz segítségünkre. 

Szokásunkhoz híven hozzunk létre egy .php fájlt az mu-plugins mappánkban, mely kapja a keresztségben a roppant fantáziadús  filter-unicorns-by-taxonomies.php nevet, az alábbi tartalommal:

php
<?php
/*
Plugin Name: Filter unicorns by taxonomies
Plugin URI: https://www.webmenedzser.hu
Description: Filter unicorns by the taxonomies attached to the post type.
Version: 1.0
Author: Radics Ottó
Author URI: https://www.webmenedzser.hu
License: GPL2
*/

function filter_unicorns_by_taxonomy( $post_type ) {
    if ( 'unicorn' !== $post_type )
        return;

    // a post type-hoz tartozó taxonómia fajták lekérése
    $taxonomies = get_object_taxonomies('unicorn');
    if ($taxonomies) {    
        foreach ( $taxonomies as $taxonomy ) {
            $taxonomy_obj = get_taxonomy( $taxonomy );
            if ($taxonomy_obj) {
                $taxonomy_name = $taxonomy_obj->labels->name;

                // mindegyik taxonómiához készítünk egy legördülő listát            
                echo "<select name='{$taxonomy}' id='{$taxonomy}' class='postform'>";
                echo '<option value="">--- ' . $taxonomy_name . ' ---</option>';

                // összeszedjük az adott taxonómiához tartozó taxonómiaelemeket
                $terms = get_terms(
                    array(
                        'taxonomy' => $taxonomy,
                        'hide_empty' => false,
                    )
                );
                if ($terms) {
                    foreach ( $terms as $term ) {
                        // betesszük a legördülő listába a taxonómia elemeket
                        printf(
                            '<option value="%1$s" %2$s>%3$s (%4$s)</option>',
                            $term->slug,
                            ( ( isset( $_GET[$taxonomy] ) && ( $_GET[$taxonomy] == $term->slug ) ) ? ' selected="selected"' : '' ),
                            $term->name,
                            $term->count
                        );
                    }
    
                    // lezárjuk a legördülő listát
                    echo '</select>';
                }
            }
        }
    }
}
add_action( 'restrict_manage_posts', 'filter_unicorns_by_taxonomy' , 10, 2);

Felülről lefelé haladva sorjában a következőket tesszük: 

  • egyrészt ellenőrizzük, hogy a unicorn bejegyzéstípus nézetét látjuk-e, és ha nem, akkor térjen is vissza a snippet, 
  • töltsük be a CPT-hez tartozó összes taxonómiatípust, és ha vannak ilyenek, akkor mindegyikre hajtsuk végre a következőket: 
    • képezzünk egy taxonómia objektumot abból, ahol tartunk, ha találunk, egyúttal mentsük el a nevét egy külön változóba, majd kezdjünk egy legördülő listás választót
    • kérjük le az ehhez a taxonómiához tartozó elemeket (gyakorlatilag azt, hogy milyen "kategóriák" vannak az adott rendezési elven belül), ha vannak ilyenek, akkor pedig írassuk ki mindegyiket a legördülőbe, a megfelelő formátumban
  • végül zárjuk le a legördülő listánkat

Nem rajongok az olyan kódért, amiben a markuphoz (HTML) és a logikához (PHP) tartozó kód keveredik - nincs ez itt sem másként. Az viszont elvitathatatlan ettől a snippettől, hogy egy újabb plugintől szabadított meg minket - és mi is magunkat. Gratulálok, eggyel kevesebb plugint használsz! 

Kérés, kérdés, óhaj-sóhaj? Dobj egy e-mailt!