WordPress – tvorba šablony od A do Z – 11.díl – Typy obsahu a jejich sloupce


Po dlouhé pauze  přicházím s dalším dílem o tvorbě šablon pro redakční systém WordPress. Poslední měsíc se mi akumulovali zakázky a tak nějak jsem trochu nevěděl kam dříve. Nyní jsem se ale utrhl a řek jsem si, že napíšu další díl.

V původním záměru tohoto dílu měla být myšlenka a řešení validace vlastních formulářů v rámci WordPressu a jeho admin části. Nakonec jsem se ale rozhodl téma pozměnit a ukázat Vám, jak upravit, filtrovat a doplnit některé parametry do sloupců, které prezentují výpis jednotlivých typů obsahu. Myslím, že to oceníte více než validaci, ke které se určitě dostaneme.

Pro jedno z klientů jsem zajišťoval webové stránky s možností prezentace zemědělské techniky. Aby vše vypadalo skutečně perfektně, připravil jsem pár změn v základním výpisu vlastního typu obsahu. Vypadá to nyní takto…

Červeně vidíte mnou zavedené změny:

tax_column

Jak na úpravu výpisu post_typu v administraci?

Začněme něčím základním a to tím, jak si přidáme sloupeček s odkazy na jednotlivé termy v naší vlastní Taxonomy, kterou jsme nazval zařazení. Protože Taxonomy je nedílnou součástí WordPressu, její umístění do výpisu je velmi jednoduché. Při zakládání taxonomy nám totiž stačí vydefinovat jeden parametr navíc. Ti, kteří můj seriál sledují pravidelně, nebudou ničím okouzleni, protože jsem tuto věc již automaticky použil v díle 9.díl – Vlastní typ obsahu.



<?php

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

function build_taxonomies() {  
    register_taxonomy( 'kategorie', 'produkty', array( 
        'hierarchical' => true, 
        'label' => 'Kategorie', 
        'swho_ui' => true, 
        'query_var' => true, 
        'rewrite' => array( 'slug' => 'kosmetika', 'with_front' => false ),
        'singular_label' => 'Kategorie',
        'public' => true,
        'show_in_nav_menus' => true,
        'show_admin_column' => true
        ) );  
} 

Onen magický parametr je „show_admin_column => true“, který říká, zobrazuj Taxonomy jako sloupec. Nic složitého že? V případě že ho chcete vypnout, stačí dát pochopitelně False.

To bychom měli, ale co když budeme mít tisíce záznamů a zrovna nám tam nebude svítit term, který bychom rádi vyfiltrovali? Pojďme si tedy vytvořit combobox, kterým budeme schopni zvolit term a nechat si výpis vyfiltrovat.

Filtr ve WordPress administraci na vlastní taxonomy

Pro tuto část nám WordPress opě připravil šikovný filtr na výpis „dat“ nad jeho výpisem. Jak tam dostaneme náš filtr? Pojďme si to ukázat…


<?php 
add_action( 'restrict_manage_posts', 'kt_add_taxonomy_filters' );
    function kt_add_taxonomy_filters() {
        global $typenow;
        $taxonomies = array('zemedelske-stroje');
        if( $typenow == 'stroje' ){
            foreach ($taxonomies as $tax_slug) {
                $tax_obj = get_taxonomy($tax_slug);
                $tax_name = $tax_obj->labels->name;
                $terms = get_terms($tax_slug);
                if(count($terms) > 0) {
                    echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
                    echo "<option value=''>$tax_name</option>";
                    foreach ($terms as $term) {
                        echo '<option value='. $term->slug, $_GET[$tax_slug] == $term->slug ? ' selected="selected"' : '','>' . $term->name .'</option>';
                    }
                    echo "</select>";
                }
            }
        }
    } ?>

Zde už je kód trochu složitější a rozsáhlejší, nejedná se ale o nic složitého. Prakticky WordPressu říkám, že při vykreslování sloupců se má zavolat funkce, kterou jsem nazval kt_add_taxonomy_filters(), která nedělá nic jiného, než že vykreslí sadu optionu v selectu, na které se bude filtrovat s tím, že foreachuji jednotlivé termy v taxonomy. Důležitá je uváděná podmínka if($typenow == ‚stroje‘) – pokud tuto podmínku neuvedete, filtr by se zobrazoval ve všech výpisech. Zbytek už je o znalosti WP.

Vlastní sloupce z výpisu custom post_type

Nyní jsme vyřešili taxonomy, ale co když chceme vlastní sloupce? Jak vidíte na mém obrázku, zavedl jsem si fotografii a cenu. Pojďme si ukázat, jak na to.


<?php 
add_filter('manage_edit-stroje_columns', 'kt_columns_filter');

function kt_columns_filter( $columns ) {
    $column_image = array( 'image' => __('Obrázek', 'Trebon'));
    $columns = array_slice( $columns, 0, 1, true ) + $column_image + array_slice( $columns, 1, NULL, true );
    $column_zadal = array( 'cena' => __('Cena', 'Trebon'));
    $columns = array_slice( $columns, 0, 3, true ) + $column_zadal + array_slice( $columns, 3, NULL, true );
    return $columns;
} ?>

Osobně používám trochu složitější řešení, než najdete na jiných portálech, ale nechci osobně řešit přidávání i defaultních sloupců do proměnné $columns a zároveň vyžaduji řazení, tak proto zdánlivě složité používání funkce array_slice.

Zde definuji sloupce, které budu mít navíc u výpisu. Při úpravě sloupce pro Váš projekt nesmíte zapomenotu na změnu názvů sloupců a dalších proměnných.

Díky této funkci budeme mít dva nové sloupce a to „Obrázek“ a „Cena“. Zatím ale bez dat a to změním právě teď.

Přidání dat do vlastních sloupců u vlastního typu obsahu

Nyní použiji další WordPress hook a naplníme naše sloupce. Já osobně používám funkci Switch, která je rychlá a velmi snadno editovatelné pro další projekty.


<?php 
add_action( 'manage_stroje_posts_custom_column', 'kt_column_action', 10, 1 );

function kt_column_action( $column ) {
    global $post;
    switch ( $column ) {
        case 'image':
        ?>
        <a style="max-width: 150px;" href="<?php bloginfo('url'); ?>/wp-admin/post.php?post=<?php echo $post->ID; ?>&action=edit" title="Edit - <?php the_title(); ?>"</a>
            <?php echo get_the_post_thumbnail( $post->ID, 'thumbnail' ); ?>
        </a>
        <?php   break;
        case 'cena':
            if(kt_is_cena_na_dotaz($post->ID)){
                echo 'Cena na dotaz.';
            } else {
                echo kt_stroj_price($post->ID);
            }
            break;
            }

    }
?>

Jak vidíte, použil jsem WordPress hook ‚manage_stroje_posts_custom_column‘ – namísto „stroje“ použijete název svého typu obsahu, jako tomu bylo u předchozích ukázet. Pak už stačí jen říct, co se u každého příspěvku zobrazí. Jak vidíte, já vypisuje náhledový obrázek s linkem do editace. Na vytvoření linku do editace detailu existuje i funkce, ale chtěl jsem Vám ukázat, že se dá vepsat prakticky cokoliv a jakkoliv. Do sloupečku cena pak volám funkci, který vypíše cenu s měnou nebo text „Cena na dotaz.“. je však na Vás, co ve sloupci zobrazíte.

Řazení podle hodnot ve vlastním sloupci

Poslední věc která nám chybí je udělat sloupec „sortable“ – neboli řaditelný podle udaných hodnot. To už má opět WP velmi dobře připravené a kód je velmi jednoduchý.


<?php 
add_filter( "manage_edit-stroje_sortable_columns", "kt_sortable_columns" );

function kt_sortable_columns() {
  return array(
    'cena' => 'Cena',
  );
}

?>

Vidíte? Stačí zavolat jednu hooku, kde je opět potřeba uvést jméno Vašeho post_typu a pak jen vrátit pole všech sloupečků (tak jak jsme si je pojmenovali výše), podle kterých chcete záznamy řadit a WP již udělá vše za Vás. Pokud máte více sloupců, stačí poli předat další parametry.

Závěrem

Dnešním dílem jsme si ukázali, jak správci webových stránek připravit přehlednější přehled založených post_typu, jak je filtrovat a jednoduše řadit. Myslím, že tuto část ocení spousta vyznavačů WordPressu.

Tomáš Kocifaj, <a href=“http://www.ktstudio.cz“ target=“_blank“>KTStudio.cz</a>

, , , , ,

Komentáře jsou uzavřeny.