WordPress: cree barras laterales automáticamente para cada categoría

Función para registrar barras laterales para cada categoría de WordPress

He estado simplificando este sitio para mejorar los tiempos de velocidad e intentar monetizar mejor el sitio sin irritar a mis lectores. Hay varias formas en las que he monetizado el sitio ... aquí son de la más lucrativa a la menos lucrativa:

  • Patrocinios directos de empresas asociadas. Trabajamos en estrategias colectivas que incorporan todo, desde seminarios web hasta acciones en redes sociales para promover sus eventos, productos y / o servicios.
  • La comercialización del afiliado desde una variedad de plataformas afiliadas. Busco e identifico las empresas, me aseguro de que tengan buena reputación y comparto artículos específicos que escribo o anuncios que ofrecen.
  • Marketing de recursos de un socio que libera eventos relacionados con el marketing, estudios de casos y documentos técnicos.
  • Banner publicitario de Google, donde los anuncios relevantes se distribuyen automáticamente a través de mi plantilla y contenido.

Barras laterales de WordPress

Dado que el marketing de afiliación proporciona unos ingresos decentes, decidí que quería destacar a anunciantes muy específicos según la categoría del sitio, por lo que quería crear dinámicamente las barras laterales sin tener que codificar cada barra lateral en el sitio. De esta manera, si agrego una categoría, la barra lateral aparece automáticamente en mi área de Widget y puedo agregar un anuncio.

Para hacer esto, necesitaba un código específico en el functions.php archivo de mi tema hijo. Afortunadamente, descubrí que alguien ya había escrito casi todo lo que necesitaba: Cree barras laterales con widgets para cada categoría en WordPress. Solo quería algunos controles adicionales sobre las categorías en las que podría desear mostrar las barras laterales.

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

Con la matriz de argumentos para recuperar categorías, puedo incluir y excluir cualquier categoría a la que desee apuntar. Dentro de la declaración foreach, puedo modificar y hacer coincidir el diseño con el formato general de la barra lateral de mi sitio de WordPress.

Además, en mi functions.php, Quiero agregar una función para ver si existe una barra lateral y tiene un widget agregado:

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;
}

Entonces, dentro de mi tema barra lateral archivo de plantilla, agrego código para mostrar dinámicamente el área si la barra lateral está registrada y tiene un widget en ella.

$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);
    }
}

Barras laterales de WordPress para cada categoría

El resultado es exactamente lo que quería:

Barras laterales de widgets de WordPress para cada categoría

Ahora, independientemente de si agrego, edito o elimino categorías ... ¡las áreas de mi barra lateral siempre estarán actualizadas!

¿Qué piensas?

Este sitio usa Akismet para reducir el correo no deseado. Descubra cómo se procesan los datos de sus comentarios.