Sivupalkin vimpainten järjestyksen vaihtaminen

WordPressin kanssa voi joskus tulla tilanteita, joissa sivupalkin vimpaimien järjestystä olisi mukava muuttaa sivutyypistä riippuen. WordPress itsessään ei tarjoa tähän oikein työkaluja, mutta asiaan on kyllä ratkaisuja. Widget Logic, esimerkiksi, lisää vimpaimiin logiikkaa, jolla niiden näkyvyyttä voi säädellä. Toinen vaihtoehto on tehdä erillinen sivupalkki, joka näytetään halutulla sivutyypillä.

Kumpikaan ratkaisuista ei ole ihanteellinen, mikäli halutaan vain siirtää vimpaimen paikkaa sivupalkissa. Sekä Widget Logicin että toisen sivupalkin käyttäminen edellyttävät saman sisällön luomista ja ylläpitämistä moneen kertaan. Sitä pyrin aina välttämään, koska muuten toinen versio sisällöstä tapaa jäädä päivittämättä, kun muutoksia tulee.

Yksi ratkaisu vimpaimien siirtelyyn on wp_get_sidebars()-funktio ja sen kutsuma sidebars_widgets-suodin, joka antaa käpisteltäväksi sivupalkin kaikkien vimpaimien luettelon. Sen avulla on helppo keikauttaa järjestys haluttuun muotoon:

add_filter('sidebars_widgets', 'sivupalkin_jarjestys');
function sivupalkin_jarjestys($w) {
    if (in_category('2') && is_single()) {
        $widget = array_shift($w["sidebar-1"]);
        array_splice($w["sidebar-1"], 6, 0, $widget);
    }
    return $w;
}

Tässä esimerkiksi siirretään sivupalkista sidebar-1 ensimmäinen vimpain kuudenneksi, kun ollaan kategorian 2 yksittäisellä sivulla. Näppärää ja tehokasta.

2 kommenttia kirjoitukseen “Sivupalkin vimpainten järjestyksen vaihtaminen

  1. Moi,
    Teen kaikukortille kotisivuja. Käytetään Manta-sivupohjaa, ongelmana just sidebarin järjestys mobiilinäkymässä, minne laitan tuon koodin? Style.css:ssä se ilmoitti virheistä.. Jos löydetään ratkaisu, olisin erittäin kiitollinen.
    Miikka Eerola, IT-Assitentti

  2. Teeman functions.php on oikea paikka. Artikkeli on sitten jo neljä vuotta vanha, että ei mitään takeita toimiiko se yhä.

Vastaa

Sähköpostiosoitettasi ei julkaista.

This site uses Akismet to reduce spam. Learn how your comment data is processed.