WordPress: автоматическое создание боковых панелей для каждой категории

Функция регистрации боковых панелей для каждой категории WordPress

Я упростил этот сайт, чтобы ускорить время и попытаться лучше монетизировать сайт, не раздражая моих читателей. Есть несколько способов монетизации сайта… вот они от наиболее до наименее прибыльных:

  • Прямое спонсорство от компаний-партнеров. Мы работаем над коллективными стратегиями, которые включают в себя все, от вебинаров до публикаций в социальных сетях, для продвижения своих мероприятий, продуктов и / или услуг.
  • Партнерский маркетинг с множества партнерских платформ. Я просматриваю и идентифицирую компании, проверяю их репутацию и делюсь конкретными статьями, которые я пишу, или рекламой, которую они предоставляют.
  • Ресурсный маркетинг от партнера, который выпускает маркетинговые мероприятия, тематические исследования и официальные документы.
  • Баннерная реклама от Google, где релевантные объявления автоматически распределяются по моему шаблону и содержанию.

Боковые панели WordPress

Поскольку партнерский маркетинг обеспечивает неплохой доход, я решил, что хочу выделить очень конкретных рекламодателей в зависимости от категории сайта, поэтому я хотел динамически создавать боковые панели без необходимости жестко кодировать каждую боковую панель на сайте. Таким образом, если я добавлю категорию - боковая панель автоматически появится в моей области виджетов, и я могу добавить рекламу.

Для этого мне нужен был конкретный код в functions.php файл моей дочерней темы. К счастью, я обнаружил, что кто-то уже написал почти все, что мне нужно: Создавайте виджетные боковые панели для каждой категории в WordPress. Мне просто нужны дополнительные элементы управления, в каких категориях я могу отображать боковые панели.

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

Имея массив аргументов для получения категорий, я могу включать и исключать любые категории, на которые я хочу ориентироваться. В операторе foreach я могу изменить макет и сопоставить его с форматированием боковой панели моего общего сайта WordPress.

Кроме того, в моем functions.php, Я хочу добавить функцию, чтобы увидеть, существует ли боковая панель и к ней добавлен виджет:

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

Затем в рамках моей темы боковая панель В файле шаблона я добавляю код для динамического отображения области, если боковая панель зарегистрирована и в ней есть виджет.

$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 для каждой категории

Результат именно то, что я хотел:

Боковые панели виджетов WordPress для каждой категории

Теперь, независимо от того, добавляю ли я, редактирую или удаляю категории ... области моей боковой панели всегда будут в актуальном состоянии!

Как вы думаете?

Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются ваши данные комментариев.