Shortcode – kurzy české koruny

V rubrice: Tipy & Triky | Obtížnost:

Potřebujete ve WordPressu vypisovat cenu v několika měnách? To vám přijde vhodný dnešní návod na shortcode, který kurzy bere přímo od České národní banky.

Celé to funguje velmi jednoduše. Pomocí cronu se do systému nahrávají každou hodinu nejnovější data z cnb.cz a nahrají do databáze WordPressu. Samotné vypsání na webu pak probíhá pomocí shortcode mena, kde si nastavíte jakou částku na jakou měnu převést.

Nejdříve ale k samotnému scriptu. První částí je zmiňovaný cron a parsování dat z čnb:

add_action('cron_hodina', 'nactiKurzy');

function crn_activation() {
    if (!wp_next_scheduled('cron_hodina')) {
        wp_schedule_event(time(), 'hourly', 'cron_hodina');
        nactiKurzy();
    }
}

add_action('wp', 'crn_activation');

function nactiKurzy() {
    $meny = explode("\n", file_get_contents('http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt'));
    unset($meny[0]);
    unset($meny[1]);
    $data = array();
    foreach ($meny as $mena) {
        $parametry = explode("|", $mena);
        if ($parametry[3]) {
            $data[$parametry[3]]['pocet'] = $parametry[2];
            $data[$parametry[3]]['kurz'] = str_replace(',', '.', $parametry[4]);
        }
    }
    if ($data)
        update_option('kurzy', $data);

Tím se dostanou potřebné kurzy do databáze. Shortcode mena vypadá následovně:

function mena_func($atts) {
    extract(shortcode_atts(array(
                'castka' => 1,
                'z' => '',
                'do' => 'CZK',
                'desetiny' => 2
                    ), $atts));
    $return = "";
    $castka = str_replace(',', '.', $castka);
    $meny = get_option('kurzy');
    if ($do == 'CZK' and $z == 'CZK')
        $return = $castka;
    elseif ($do == 'CZK') {
        $kurz = $meny[$z]['kurz'];
        $pocet = $meny[$z]['pocet'];
        $return = $kurz * ($castka / $pocet);
    } elseif ($z == 'CZK') {
        $kurz = $meny[$do]['kurz'];
        $pocet = $meny[$do]['pocet'];
        $return = $castka / ($kurz / $pocet);
    }
    return number_format($return, $desetiny, ',', ' ');
}

add_shortcode('mena', 'mena_func');

A teď k samotnému použití. Shortcode [mena] má 4 parametry z nichž jeden je povinný.

Parametry:
z – jediný povinný parametr, určuje z které měny se převádí
do – parametr do naopak určuje, do které se převádí, ve výchozím stavu je nastaven na CZK, mějte na paměti, že alespoň jeden z nich musí být česká koruna
castka – částka, která se má převádět, ve výchozím stavu 1
desetiny – kolik desetinných míst se má zobrazit

Například [mena z=CZK do=USD castka=1000 desetiny=1] převede 1000 korun na dolary a vypíše s jedním desetinným místem.

V rubrice: Tipy & Triky | Obtížnost:

Komentáře

  1. Jenom malá oprava. Na řádku 13 u prvního skriptu chybí lomítko. Výsledek by měl vypadat takto:
    $meny = explode(„\n“, file_get_contents(‚http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt‘));

  2. Jenom malá oprava. Na řádku 13 u prvního skriptu chybí lomítko. Kód by měl vypadat takto:
    $meny = explode("\n", file_get_contents('http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt'));

    1. Díky, editor mi to musel špatně přelouskat, když jsem to do něj kopíroval.

Comments are closed.