我的问题是,如何删除仅适用于特定产品类别的侧边栏" 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');
}
?>
答案 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 中使用操作挂钩。
而不是直接在插件中编辑这些文件(这是一个非常糟糕的主意,因为一旦更新插件并且所有更改都将丢失!),您可以将它们复制到您的主题中:
请记住在这里保持目录结构相同。如果 您要编辑的模板位于子文件夹中,然后记住 在主题目录中创建该子文件夹。
在 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