Příklad zobrazování uživatelských polí (custom fields)

Podle mého názoru jsou to právě uživatelská pole (custom fields) a jejich využívání, která z WordPressu dělají víc než pouhý blogovací systém. Dost často se s potřebou jejich nastavení setkáte v různých šablonách vzhledu, a je mi jasné, že na rozdíl od laiků, kteří možná ani dost dobře nechápu, nač tam takováto pole v administraci příspěvku jsou, programátoři si s jejich využitím poradí obratem ruky, a snad mi odpustí tuhle odbočku na tenký led (pro mě), případně mnou uvedené nějaké nepřesnosti opraví v komentářích.

uzivatelska_pole Uživatelská pole hodnotami naplňují často různé pluginy, například plugin WP-PostViews do nich zapisuje počty zobrazení stránek, což při použití tohoto pluginu můžete snadno ověřit. Když se podíváte do publikovaného příspěvku, tak v jeho administraci objevíte existující uživatelské pole nazvané views a jeho číselná hodnota bude odpovídat počtu zobrazení daného článku či stránky.

Já ale potřebovala využít uživatelská pole tak trochu jinak, bez pomoci nějakého pluginu vypsat hodnotu (obsah) uživatelského pole na hlavní stránce v patičce u každého článku…

Ale popořádku. Oč mi šlo? Jednoduše jsem potřebovala zobrazit u každého excerptu článku na hlavní stránce informaci o datumu ukončení události, konkrétně například konce soutěže. Vzhledem k dynamickému vypisování soutěží na hlavní stránce bylo nemyslitelné, že bych nějakým způsobem tento údaj dostala na stránku (respektive do souboru) index.php jinak, než právě s pomocí nějakého dynamického skriptu (tj. v tomto případě PHP), v podobě, v jaké je podporován WordPressem. Nejjednodušší cestou se mi jevilo vložit u každého článku datum do uživatelského pole, nazvaného například datum konce a obsah tohoto pole dynamicky vypsat na zmíněné hlavní straně. No jo, ale kudy na to?

Na stránce funkcí využitelných ve WordPressu ve vztahu k uživatelským polím jsem našla na stránce věnované funkci get_post_meta základní podobu potřebného výpisu.

Viz zde:
http://codex.wordpress.org/Function_Reference/get_post_meta

Podoba toho základního výpisu je následující:

<?php $meta_values = get_post_meta($post_id, $key, $single); ?>

Tento výpis však bylo třeba upravit a zobrazit s pomocí funkce echo… Navíc co vlastně znamenají jednotlivé proměnné?

Proměnná $post_id – jak už asi označení napovídá, ve výpisu poslouží k určení ID daného článku, takže její hodnota může mít například podobu $post_id=76. V našem případě, kdy se měly zobrazovat články s různými ID v rámci cyklu (loop), se tato proměnná upraví takto: $post->ID. Tak je i níže použita.

$key i v případě této proměnné nám pomůže její název, znamená „klíč“, tj. klíčové slovo, tedy název uživatelského pole, v našem případě to je „datum konce“, respektive $key=“datum konce“

A konečně je tu proměnná $single, která nabývá jen dvou hodnot: nepravda (FALSE), která je defaultní a pravda TRUE, kterou v našem případě vyvoláváme, tedy $single=true. Hodnota FALSE vyvolá obsah všech definovaných hodnot proměnné $key (tj. pole – array), hodnota TRUE zobrazí pouze první z případného pole těchto hodnot.

Takto vznikl kód, s jehož pomocí lze vypsat s použitím proměnné $vysledek (použito místo proměnné $meta_values) a funkce pro její zobrazení – echo, respektive echo $vysledek obsah uživatelského pole přesně tak, jak jsem potřebovala. A výsledek vidíte níže.

Tentýž kód níže je vypsán pro názornost ve třech možných a funkčních variantách – a taky – jak to komu vyhovuje:

<?php
$key=“datum konce“; $single=true; $vysledek = get_post_meta($post->ID, $key, $single);
echo $vysledek;
?>

NEBO

<?php
$vysledek = get_post_meta($post->ID, „datum konce“, true);
echo $vysledek;
?>

ANEBO

<?php
$vysledek = get_post_meta($post->ID, $key=“datum konce“, $single=true);
echo $vysledek;
?>

Princip můžete vyzkoušet, nezapomeňte do uživatelských polí vložit pole nazvané datum konce či jak si pole nazvete, a naplnit jej v sousedním políčku hodnotou, př. 30.12.2009 atp. (aby fungovalo u všech příspěvků, je nutno toto pole vyplnit samozřejmě rovněž v administraci všech příspěvků).



Přečtěte si také:



Kategorie : Užitečné, WordPress
Štítky: , , , ,

7 x okomentováno “Příklad zobrazování uživatelských polí (custom fields)”

Přidat komentář (+)

  1. Re4DeR napsal:

    Krásný příspěvek. Jen dodám, že není špatné kontrolovat jestli dané pole vůbec existuje když není povinné.

    if ( get_post_meta($post->ID, ‚datum konce‘, true) ) {
    $vysledek = get_post_meta($post->ID, ‚datum konce‘, true);
    echo „Datum konce: “ . $vysledek;
    }

  2. WPress napsal:

    Díky, to se může hodit taky. 🙂

    A koukám, že máš nový webík, tak ať se daří. 😉

  3. Aramon napsal:

    Zdravím, mám dotaz, snad nebude vadit, že otvírám znovu tak starý příspěvek.
    Mám v uživatelském poli key „thumb“, které obsahuje kompletní UR k obrázku,náhledu. Jak to udělat, aby se tento „thumb“ nastavoval jako náhledový obrázek? Nejsme ve WP odborník, hodně bych ocenil konkrétní příklad včetně PHP kódu, jestli by to bylo možné…Snažím se najít nějaký návod pro blbečky, ale ani tenhle mi není jasný.
    Mohl bych tedy poprosit o pomoc?

  4. Solurus napsal:

    Zdravim ,mam dotaz asi uplne debilni, ale nikde nemuzu najit onen custom field (uživatelské pole) . Je soucasti WP 3.1.3. nebo se jedná o konkretni plugin ??

    Resim to uz nejakou hodinu a jsem ztracenej….
    Predem dik za jakoukoliv odpoved

    • WPress napsal:

      V nové verzi WordPress 3.1 a výše defaultně tvůrci „schovali“ vše, co se jim zdálo být v editaci příspěvků a stránek (atp.) nadbytečné, včetně uživatelských polí (custom fileds). Aby se vám pole zobrazovala, musíte je zaškrtnout v rozbalovacím menu, které rozbalíte kliknutím na Nastavení zobrazených informací (vpravo nahoře, vedle tlačítka Nápovědy), tam si můžete zaškrtnout ostatně i řadu dalších věcí, které se vám hned poté již ukážou v administraci příspěvku.

  5. Martin Odehnal napsal:

    Super, konečně jsem pochopil jak zobrazit jednotlivá pole. Pěkný srozumitelný návod.
    Paráda. Jdu nastudovat, jestli jsou tu další zajímavé články 🙂 Díky!!!

  6. Tomáš napsal:

    Dobry den, prosim o radu jak vypsat custom fields kdyz jej potrebuji vypsat do sablony mimo loop. Dekuji

Okomentovat

Pro vkládání komentářů musíte být přihlášen/a.