Jak vytvořit vlastní metabox

V dnešním tutoriálu si ukážeme, jak vytvořit vlastní metabox. Co jsou vlastně metaboxy? Narazil na ně každý, kdo kdy ve WordPressu vytvářel stránku, nebo článek. Jsou to přesouvatelné boxy, které se nachází v administraci, při vytváření článku, nebo stránky. Všechny akce, které děláte při ukládání článku, přidávání náhledového obrázku, nebo zařazení do kategorie, děláte v jednom z metaboxů.

Metaboxy v administraci

Umístění metaboxů

 

Jak můžete vidět, na obrázku jsou dva metaboxy, jeden v umístění Advanced, to je Custom Fields a potom umístění Side – Page Attributes.

Do těchto metaboxů pak můžete vkládat různé prvky, které vám pomohou vytvářet vlastní nastavení. Může se v podstatě jednat o jakékoliv funkce, my si dnes ukážeme. jak vytvořit metabox, jenž z textového pole formuláře, uloží zadanou hodnotu do post meta.

Post meta, jsou informace ukládané do databáze, společně s id obsahu, ke kterému patří. Řekněme, že budeme mít o automobilech. Každou značku pak budeme chtít v šabloně odlišit a zobrazit její logo. Vytvoříme si post meta s názvem „znacka“ a u každého článku budeme mít možnost vložit informaci o značce.

Vytvoření metaboxu

Možná se to na první pohled zdá složité, ale ve skutečnosti už vývojáři WordPressu udělali většinu práce za vás a máte k dispozici funkci add_meta_box, pomocí níž jednoduše metabox vytvoříme.

Id metaboxu – muj_metabox_znacka, html id metaboxu.
Titulek metaboxu – Informace o vozidle, titulek, který se bude zobrazovat v horní části metaboxu.
Funkce pro obrazení metaboxu – funkce_zobrazeni_metaboxu, funkce, která se postará o vykreslení metaboxu.
Druh obsahu – post, typ obsahu, kde se bude metabox zobrazovat. Díky tomu můžete vytvořit i metabox, který se bude zobrazovat jen na custom post type, nebo jen u článků. V našem případě to jsou články.
Umístění metaboxu – side, určuje, kde se bude metabox zobrazovat.
Priority – default, určuje prioritu metaboxu, v našem případě jsme ji nechali na default.

Celá funkce add_meta_box je uvnitř funkce pridani_znacky_box, protože musíme WordPressu říci, že má metabox zaregistrovat a proto pomocí akce add_meta_boxes zavoláme funkci pridani_znacky_box. Tím se přiřadí add_meta_box k ostatním metaboxům a při zobrazení administrace se zobrazí také.

Jako poslední vytvoříme funkci, pro zobrazení obsahu metaboxu.

function funkce_zobrazeni_metaboxu( $post ) {
 wp_nonce_field( basename( __FILE__ ), 'znacka_vozu_post_class_nonce' );
?>
<p><?php _e('Zadejte značku vozu','textdomain'); ?></p>
<p><input type="text" name="znacka_vozu" id="znacka_vozu" 
value="<?php echo esc_attr( get_post_meta( $post->ID, 'znacka_vozu', true ) ); ?>" /></p>
<?php
}
Čtěte  Automatické vytvoření náhledového obrázku z prvního obrázku v článku

Tato funkce je volána pomocí argumentu v add_meta_box, viz. výše.
Pomocí wp_nonce_field přidáme skrytá pole, pro kontrolu autorizace. Je to z bezpečnostních důvodů, protože tak můžeme určit, zda byla post hodnota skutečně odeslána z aktuální stránky.
Funkce get_post_meta ve value inputu se stará o zobrazení již uložené hodnoty, protože, pokud bude pole prázdné, dojde při uložení článku k přepsání hodnoty.

Výsledek je vidět zde:

novy metabox

Uložení hodnot

Vytvoříme si funkci, pro uložení hodnoty z metaboxu:

function znacka_save_post_meta( $post_id, $post ){
 
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
  return $post_id;
 
if ( !isset( $_POST['znacka_vozu_post_class_nonce'] ) || 
     !wp_verify_nonce( $_POST['znacka_vozu_post_class_nonce'], 
     basename( __FILE__ ) ) )
    return $post_id;
 
$new_meta_value = ( isset( $_POST['znacka_vozu'] ) ? 
sanitize_html_class( $_POST['znacka_vozu'] ) : '' ); 
 
update_post_meta( $post_id, 'znacka_vozu', $new_meta_value );   
 
}

Nejprve zkontrolujeme, zda se jedná o automatické uložení článku. Protože jsme článek neukládali, není potřeba měnit hodnotu post_meta.

Při zobrazení metaboxu jsme vytvořili nonce field a zde zkontrolujeme, zda nonce existuje a zda odpovídá správné hodnotě. Pokud ne, nebudeme nic ukládat.

Čtěte  Jak přidat atribut nofollow všem odkazům z článků na vašem Wordpress web

Do proměnné $new_meta_value vložíme po sanitování hodnotu odeslanou z formuláře. Měli bychom vždy sanitovat textová pole, protože nemůžeme vědět, zda někdo nevkládá škodlivý kód.

Jako poslední uložíme post meta. Funkce update_post_meta kontroluje, zda již hodnota existuje a pokud ne, vytvoří ji. Nemusíme tedy používat add_post_meta.

Funkci máme hotovou a musíme ji zaregistrovat do akce save_post, což znamená, že vždy, když budeme článek ukládat, provede se i tato funkce:

add_action( 'save_post', 'znacka_save_post_meta', 10, 2 );

Pokud tedy nyní vložíte do formuláře značku vozu a uložíte článek, bude se vám v metaboxu zobrazovat uložená hodnota.

Závěr

V tuto chvíli máte u článku možnost přidat post_meta s názvem znacka_vozu. To vám dává možnost pomocí podmínky v šabloně kontrolovat hodnotu meta a nabídnout uživateli pro každou značku jiné logo vozu.

About The Author

Zajímá mne Wordpress, responsivní šablony a zkrátka vše kolem tohoto skvělého redakčního systému.

Related posts

4 Comments

    1. Musilda

      Echo get_post_meta($post->ID, ‚nazevpole‘,true);
      Pokud je uvedeno true, bude vrácen řetězec, pokud ne, bude to pole.

      Reply
  1. Ladislav

    Má takový zvláštní problém.
    Metaboxy používám a fungují skvěle ne však když chci pracovat s obrázky.

    Když nahraju obrázky a nechám zobrazit obsah the_meta();

    ukáže to

    fotecky: 106, 105, 104

    což je správně

    když však zobrazím obsah get_post_meta($post->ID, ‚fotecky‘, true)
    ukáže to jen 106

    jak je to možné?

    Reply

Leave a Reply

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Chcete mít přehled o dění ve světě WordPressu?

Přímo do vašeho emailu

Pravidelný přehled o novinkách, trendech a událostech, které se točí kolem WordPressu. Souhrn toho nejzajímavějšího od nás i ze zahraničí.