Shortcode – kurzy české koruny


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.


4 responses to “Shortcode – kurzy české koruny”

  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'));

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