WordPress: Skapa sidofält automatiskt för varje kategori

Funktion för att registrera sidofält för varje WordPress-kategori

Jag har förenklat den här webbplatsen för att förbättra hastighetstiderna och försöka tjäna pengar på webbplatsen bättre utan att irritera mina läsare. Det finns flera sätt att tjäna pengar på webbplatsen ... här är de från mest till minst lukrativa:

  • Direkt sponsring från partnerföretag. Vi arbetar med kollektiva strategier som innehåller allt från webbseminarier till sociala medier för att marknadsföra sina evenemang, produkter och / eller tjänster.
  • Affiliate marknadsföring från en rad anslutna plattformar. Jag söker och identifierar företagen, ser till att de är ansedda och delar specifika artiklar jag skriver eller annonser som de tillhandahåller.
  • Resursmarknadsföring från en partner som släpper marknadsföringsrelaterade evenemang, fallstudier och vitböcker.
  • Bannerannonsering från Google där relevanta annonser automatiskt sprids genom min mall och mitt innehåll.

WordPress-sidofält

Med affiliate-marknadsföring som gav anständiga intäkter bestämde jag mig för att jag skulle vilja framhäva mycket specifika annonsörer baserat på webbplatsens kategori, så jag ville dynamiskt skapa sidofältet utan att behöva hårdkoda varje sidofält på webbplatsen. På det här sättet, om jag lägger till en kategori - visas sidofältet automatiskt i mitt Widget-område och jag kan lägga till en annons.

För att göra detta behövde jag lite specifik kod i functions.php fil med mitt barns tema. Tack och lov upptäckte jag att någon redan hade skrivit nästan allt jag behövde: Skapa widgetiserade sidofält för varje kategori i WordPress. Jag ville bara ha några ytterligare kontroller över vilka kategorier jag kanske vill visa sidofältet i.

function add_category_sidebars() {
    $args = array(
        'type'                     => 'post',
        'orderby'                  => 'name',
        'order'                    => 'ASC',
        'hide_empty'               => 1,
        'hierarchical'             => 1,
        'exclude'                  => '',
        'include'                  => '',
        'number'                   => '',
        'taxonomy'                 => 'category'
        ); 
    
    $categories = get_categories($args);

    foreach ($categories as $category) {
        if (0 == $category->parent)
            register_sidebar( array(
                'name' => $category->cat_name,
                'id' => $category->category_nicename . '-sidebar',
                'description' => 'This is the ' . $category->cat_name . ' widgetized area',
                'before_widget' => '<aside id="%1$s" class="widget %2$s">',
                'after_widget' => '</aside>',
                'before_title' => '<h3 class="widget-title">',
                'after_title' => '</h3>',
            ));
        }
}
add_action( 'widgets_init', 'add_category_sidebars' );

Med en rad argument för att hämta kategorier kan jag inkludera och utesluta alla kategorier som jag vill rikta in mig på. Inom förklaringsuttalandet kan jag ändra och matcha layouten till min övergripande WordPress-sideformatering.

Dessutom, i min functions.php, Jag vill lägga till en funktion för att se om det finns en sidofält och har en widget till:

function is_sidebar_active($cat_name) {
    global $wp_registered_sidebars;
    $cat_id = get_cat_ID($cat_name);
    $widgetlist = wp_get_sidebars_widgets();
    if ($widgetlist[$cat_id])
        return true;
    return false;
}

Sedan, inom mitt tema sidebar mallfil lägger jag till kod för att dynamiskt visa området om sidofältet är registrerat och har en widget i den.

$queried_object = get_queried_object();
if ($queried_object) {
    $post_id = $queried_object->ID;
}
if(is_category() || in_category($cat_name, $post_id)) {
    $sidebar_id = sanitize_title($cat_name);
    if( is_sidebar_active($sidebar_id)) {
        dynamic_sidebar($sidebar_id);
    }
}

WordPress-sidofält för varje kategori

Resultatet är precis vad jag ville:

WordPress Widget Sidofält för varje kategori

Nu, oavsett om jag lägger till, redigerar eller tar bort kategorier ... kommer mina sidofält alltid att vara uppdaterade!

Vad tror du?

Den här sidan använder Akismet för att minska spam. Läs om hur din kommentardata behandlas.