Woocommerce making sidebar appear at the bottom of

2019-07-16 10:01发布

I installed woocommerce on a non woo theme, I wish to style it, without much change. But when I installed it, the sidebar is displayed out of any container (widgets are shown in their divs but without a wrapper). Now I used

add_action('woocommerce_before_main_content', 'my_theme_wrapper_start', 10);
add_action('woocommerce_after_main_content', 'my_theme_wrapper_end', 10);

function my_theme_wrapper_start() {
  echo '<section id="main">';
}

function my_theme_wrapper_end() {
  echo '</section>';
}

From the documentation, and this works for woocommerce just fine. But my sidebar is still at the bottom, without a wrapper. Is there a way to wrap the sidebar as well, and place it next the content of the shop, using just hooks, not copying any files out of the plugin?

1条回答
Bombasti
2楼-- · 2019-07-16 10:46

I figured it out, this is a 'framework' that works for me, in case anybody needs it:

<?php

if (!function_exists('custom_open_woocommerce_content_wrappers')) {
    function custom_open_woocommerce_content_wrappers(){
        echo '<div class="container shop_container"><div class="row">';
    }
}

if (!function_exists('custom_close_woocommerce_content_wrappers')) {
    function custom_close_woocommerce_content_wrappers(){
        echo '</div></div>';
    }
}

if (!function_exists('custom_product_wrapper_open')) {
    function custom_product_wrapper_open(){
        echo '<div class="span8 content_with_right_sidebar">';
    }
}

if (!function_exists('custom_product_wrapper_close')) {
    function custom_product_wrapper_close(){
        echo '</div>';
    }
}

if (!function_exists('custom_before_shop_loop_sidebar')) {
    function custom_before_shop_loop_sidebar() {
        echo '<aside class="span4 sidebar sidebar_right">';
        dynamic_sidebar(get_theme_mod('shop_sidebar', ''));
        echo '</aside>';
    }
}


add_action( 'woocommerce_after_shop_loop', 'custom_before_shop_loop_sidebar', 20);

if (!function_exists('custom_prepare_woocommerce_wrappers')) {
    function custom_prepare_woocommerce_wrappers(){
        remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 );
        remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10);
        remove_action( 'woocommerce_before_shop_loop', 'woocommerce_output_content_wrapper', 10);
        remove_action( 'woocommerce_after_shop_loop', 'woocommerce_output_content_wrapper_end', 10);

        add_action( 'woocommerce_before_main_content', 'custom_open_woocommerce_content_wrappers', 10 );
        add_action( 'woocommerce_after_main_content', 'custom_close_woocommerce_content_wrappers', 10 );
        add_action( 'woocommerce_before_shop_loop', 'custom_product_wrapper_open', 10 );
        add_action( 'woocommerce_after_shop_loop', 'custom_product_wrapper_close', 10 );
    }
}

add_action( 'wp_head', 'custom_prepare_woocommerce_wrappers' );

This will create a wrapper with a right sidebar. You can customize it further if you need to. Hope it helps.

查看更多
登录 后发表回答