WordPress: Tự động tạo thanh bên cho từng danh mục

Chức năng đăng ký Sidebars cho từng danh mục WordPress

Tôi đã đơn giản hóa trang web này để cải thiện thời gian tốc độ và cố gắng kiếm tiền từ trang web tốt hơn mà không gây khó chịu cho độc giả của tôi. Có nhiều cách mà tôi đã kiếm tiền từ trang web… đây là những cách sinh lợi từ nhiều nhất đến ít nhất:

  • Tài trợ trực tiếp từ các công ty đối tác. Chúng tôi làm việc dựa trên các chiến lược tập thể kết hợp mọi thứ từ hội thảo trên web đến chia sẻ trên mạng xã hội để quảng bá các sự kiện, sản phẩm và / hoặc dịch vụ của họ.
  • Liên kết tiếp thị từ một loạt các nền tảng liên kết. Tôi lùng sục và xác định các công ty, đảm bảo họ có uy tín và chia sẻ các bài báo cụ thể mà tôi viết hoặc quảng cáo mà họ cung cấp.
  • Tiếp thị tài nguyên từ một đối tác phát hành các sự kiện liên quan đến tiếp thị, nghiên cứu điển hình và sách trắng.
  • Biểu ngữ quảng cáo từ Google, nơi các quảng cáo có liên quan được tự động phân tán thông qua mẫu và nội dung của tôi.

Thanh bên WordPress

Với việc tiếp thị liên kết mang lại một số doanh thu kha khá, tôi quyết định rằng tôi muốn làm nổi bật các nhà quảng cáo rất cụ thể dựa trên danh mục của trang web, vì vậy tôi muốn tạo động các thanh bên mà không cần phải viết mã cho từng thanh bên trên trang web. Bằng cách này, nếu tôi thêm một danh mục - thanh bên sẽ tự động xuất hiện trong khu vực Tiện ích của tôi và tôi có thể thêm quảng cáo.

Để làm điều này, tôi cần một số mã cụ thể trong functions.php tệp chủ đề con của tôi. Rất may, tôi thấy rằng ai đó đã viết gần như mọi thứ mà tôi cần: Tạo thanh bên rộng rãi cho từng danh mục trong WordPress. Tôi chỉ muốn một số điều khiển bổ sung đối với những danh mục mà tôi có thể muốn hiển thị thanh bên.

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

Với mảng đối số để truy xuất danh mục, tôi có thể bao gồm và loại trừ bất kỳ danh mục nào mà tôi muốn nhắm mục tiêu. Trong câu lệnh foreach, tôi có thể sửa đổi và khớp bố cục với định dạng thanh bên tổng thể của trang web WordPress của mình.

Ngoài ra, trong functions.php, Tôi muốn thêm một chức năng để xem liệu một thanh bên có tồn tại hay không và có thêm một tiện ích vào nó:

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

Sau đó, trong chủ đề của tôi sidebar tệp mẫu, tôi thêm mã để hiển thị động khu vực nếu thanh bên được đăng ký và có tiện ích con trong đó.

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

Thanh bên WordPress cho từng danh mục

Kết quả đúng như những gì tôi muốn:

Thanh bên tiện ích con WordPress cho từng danh mục

Giờ đây, bất kể tôi thêm, chỉnh sửa hay xóa danh mục… các khu vực thanh bên của tôi sẽ luôn được cập nhật!

Bạn nghĩ gì?

Trang web này sử dụng Akismet để giảm spam. Tìm hiểu cách xử lý dữ liệu nhận xét của bạn.