从产品类别页面中删除补充工具栏| Wordpress Woocommerce

时间:2015-08-23 03:50:35

标签: php css wordpress woocommerce

我的问题是,如何删除仅适用于特定产品类别的侧边栏" Slug"而不是它的子弹 如果网址如下所示 - 删除侧栏并使页面全宽仅适用于slu"卫生洁具"和"壁橱" http://www.example.com/product-category/sanitaryware/
http://www.example.com/product-category/sanitaryware/closets/

我不想删除所有"产品类别"的边栏。原因,我希望旁边的酒吧出现一个大童子弹"一件式壁橱":
http://www.example.com/product-category/sanitaryware/closets/one-piece-closets

代码:我在function.php中使用 - 这是删除网站所有产品类别中的侧栏。

  <?php
            /**
             * woocommerce_sidebar hook
             *
             * @hooked woocommerce_get_sidebar - 10
             */
            if (!is_product_category('sanitaryware')){
        do_action('storefront_sidebar');
}
?>

3 个答案:

答案 0 :(得分:3)

根据您希望隐藏顶级类别及其子女的侧边栏的愿望,我们需要一个系统来确定层次结构&#34;深度&#34;任何术语存档。类似于人们经常获得顶级&#34;父条款我们可以while循环获取术语的术语对象并检查术语的父级。在我们的情况下,我们只是保留一个计数并返回它,而不是返回顶级父级。

/**
* Returns depth level of product category
*
* @param    string      $catid  Product category ID to be checked
* @return   string      $depth  how many categories deep is this term in the hierarchy
*/
function so_32165017_get_product_cat_depth($catid) {
    $depth = 0;
    while ($catid) {
        $cat = get_term_by('id', $catid, 'product_cat'); // get the object for the catid
        if( $cat->parent > 0 ){
            $depth++;
        }
        $catid = $cat->parent; // assign parent ID (if exists) to $catid
        // the while loop will continue whilst there is a $catid
    }
    return $depth;
}

既然我们可以使用某些条件作为条件,我们可以有条件地删除WooCommerce侧边栏:

/**
* Hide the sidebar for items 2 levels deep or more
*/
function so_32165017_conditionally_remove_sidebar(){
    if( is_product_category()){
        $t_id = get_queried_object()->term_id;
        if( so_32165017_get_product_cat_depth( $t_id ) < 2 ){
            remove_action( 'woocommerce_sidebar', 'woocommerce_get_sidebar', 10 );
            // could be theme specific ex: Storefront
            remove_action( 'storefront_sidebar', 'storefront_get_sidebar', 10 );
        }
    }
}
add_action( 'woocommerce_before_main_content', 'so_32165017_conditionally_remove_sidebar' );

修改/更新

如果您还想添加自定义正文类以使侧边栏页面更容易设置样式,那么我相信您可以在实际过滤“{1}”过滤器的同时从body_class过滤器中删除相关操作身体课。

/**
* Hide the sidebar for items 2 levels deep or more
*/
function so_32165017_conditionally_remove_sidebar( $class ){
    if( function_exists('is_product_category') && is_product_category() ){
        $t_id = get_queried_object()->term_id;
        if( so_32165017_get_product_cat_depth( $t_id ) < 2 ){
            remove_action( 'woocommerce_sidebar', 'woocommerce_get_sidebar', 10 );
            // could be theme specific ex: Storefront
            remove_action( 'storefront_sidebar', 'storefront_get_sidebar', 10 );
            // add a custom body class
            $class[] = 'full-width';
        }
    }
    return $class;
}
add_action( 'body_class', 'so_32165017_conditionally_remove_sidebar' );

答案 1 :(得分:0)

一种方法是制作自定义模板,并在正在查看“产品类别”页面时阻止侧边栏呈现。遵循Woocommerce docs的升级安全建议,您应该:

1)转到 wp-content / plugins / woocommerce / templates / 目录并复制 archive-product.php 文件

2)在您的主题目录中创建 woocommerce 目录(例如wp-content / themes / your-theme / woocommerce)

3)创建wp-content/plugins/woocommerce/templates/archive-product.php的副本,并将其置于 wp-content / themes / your-theme / woocommerce / 中,并将文件命名为 archive-product.php

4)查看新自定义文件的底部附近并找到:

do_action( 'woocommerce_sidebar' );

5)用以下代码替换该行代码:

if (!is_product_category('sanitaryware') && !is_product_category('Faucet')) {
   do_action( 'woocommerce_sidebar' );
}

6)要使“产品类别”页面内容为全宽,您可以使用过滤器向这些页面的product-category添加名为<body>的类。

要添加此新类,请在 functions.php 文件中插入此代码:

// Add specific CSS class by filter
add_filter( 'body_class', 'product_categories' );
function product_categories( $classes ) {
    // add 'class-name' to the $classes array
    if (is_product_category('sanitaryware') && is_product_category('Faucet')) {
        $classes[] = 'product-category';
    }
    // return the $classes array
    return $classes;
}

7)然后在主题的样式表中,您可以使用此CSS选择器定位产品类别页面:

body.product-category { /* place Product Category page specific CSS here */ }

由于我不知道您主题的具体细节,因此我无法告诉您要将100%宽度设置为目标的HTML元素,但如果页面内容位于像<div id="content">之类的东西你可以这样设置CSS:

body.product-category #content { 
    width: 100%;
    float: none;
} 

答案 2 :(得分:0)

您可以从类别页面覆盖 archive-product.php 中移除侧边栏,或在WordPress中当前主题中的 function.php 中使用操作挂钩。

而不是直接在插件中编辑这些文件(这是一个非常糟糕的主意,因为一旦更新插件并且所有更改都将丢失!),您可以将它们复制到您的主题中:

  • 在您的主题目录中,创建一个名为“WooCommerce。”的新文件夹。
  • 导航到WooCommerce插件目录并打开“templates”文件夹。 templates文件夹包含许多子文件夹,其中包含WooCommerce使用的所有不同模板。幸运的是,WooCommerce中的模板文件结构和命名很容易理解。
  • 在新创建的“WooCommerce”文件夹中,复制要编辑的模板文件。
  

请记住在这里保持目录结构相同。如果   您要编辑的模板位于子文件夹中,然后记住   在主题目录中创建该子文件夹。

archive-product.php -

<?php
/**
 * woocommerce_sidebar hook
 *
 * @hooked woocommerce_get_sidebar - 10
 */
do_action('woocommerce_sidebar');?>

此类别页面上的代码显示侧栏删除此代码并保存文件。

要从类别页面中删除侧栏,您要在中使用操作挂钩     function.php 文件 -

    add_filter( 'body_class', 'remove_sidebar' );
    function remove_sidebar()
    {
        if( is_product_category()) { 
         remove_action( 'woocommerce_sidebar', 'woocommerce_get_sidebar', 10);
       }
    }

接下来,我们必须编辑主题文件夹中的 style.css -

body.product-category #content
    {
            width: 100%;
    }
  

在这里你可以获得WooCommerce Action和Filter Hook    - https://docs.woothemes.com/wc-apidocs/hook-docs.html