WooCommerce产品类别Widget-隐藏没有库存产品的类别

时间:2012-12-04 作者:olex

我在Wordpress网站上使用WooCommerce,侧边栏中有一个小部件显示所有产品类别。它设置为隐藏空类别,效果很好。然而,它仍然显示只包含缺货产品的类别,我想更改这些类别。

技术说明:WooCommerce产品是一种定制的帖子类型(product), 产品类别是一种自定义分类法(product_cat), 库存计数是产品上的自定义字段(_stock). WooCommerce产品类别小部件显示他们使用wp_list_categories(). 我曾尝试挖掘代码以查找一些可以挂接的筛选器调用,但没有找到。

有没有一种不修改核心或WooCommerce代码的好方法?也许我遗漏了一个钩子/过滤器,可以检查自定义字段值?

3 个回复
SO网友:Brad Dalton

使用woocommerce_product_categories_widget_argswoocommerce_get_availability 在自定义函数中筛选,以筛选缺货产品的“产品类别”小部件。

查看使用这些过滤器可以得到什么,如果遇到问题,请将代码发回此处。

以下是我网站上的一些代码,可能会帮助您入门。

add_filter( \'woocommerce_product_categories_widget_args\', \'wpsites_exclude_product_cat_widget\' );

function wpsites_exclude_product_cat_widget( $args ) {

$args[\'exclude\'] = array(\'16\',\'46\');

return $args;
}
以下是所有hooks for WooCommerce

SO网友:helgatheviking

我不确定这是否可行,因为我认为wp_list_categories() 这将检查类别中帖子/产品的状态。即使有,您也必须查询所有类别中的大量产品,这将是非常低效的。

您可以更换WC_Product_Cat_Dropdown_Walker 然后在那里检查。

责任函数看起来好像接受了另一个Walker:

/**
 * Walk the Product Categories.
 *
 * @return mixed
 */
function wc_walk_category_dropdown_tree() {
    global $woocommerce;

    if ( ! class_exists( \'WC_Product_Cat_Dropdown_Walker\' ) )
        include_once( WC()->plugin_path() . \'/includes/walkers/class-product-cat-dropdown-walker.php\' );

    $args = func_get_args();

    // the user\'s options are the third parameter
    if ( empty( $args[2][\'walker\']) || !is_a($args[2][\'walker\'], \'Walker\' ) )
        $walker = new WC_Product_Cat_Dropdown_Walker;
    else
        $walker = $args[2][\'walker\'];

    return call_user_func_array(array( &$walker, \'walk\' ), $args );
}
因此,如果你复制了这个小部件,你表面上可能会改变

// Stuck with this until a fix for http://core.trac.wordpress.org/ticket/13258
            wc_product_dropdown_categories( array(
                \'show_counts\'        => $c,
                \'hierarchical\'       => $h,
                \'show_uncategorized\' => 0,
                \'orderby\'            => $o
            ) );

// Stuck with this until a fix for http://core.trac.wordpress.org/ticket/13258
            wc_product_dropdown_categories( array(
                \'show_counts\'        => $c,
                \'hierarchical\'       => $h,
                \'show_uncategorized\' => 0,
                \'orderby\'            => $o,
                                \'walker\'             => \'InStock_Categories\'
            ) );
然后你将负责创建并包括InStock_Categories 沃克级。完全未经测试,但只是提出一些想法。

SO网友:Steve

如果您转到WooCommerce=>设置并选择“库存”选项卡,您将看到“从目录中隐藏缺货项目”选项。如果启用此选项,则不会显示缺货项目,如果类别不包含任何可销售(缺货或无价格)项目,则也将隐藏该类别。

Update

好的,我读了“widget”,在我的回答中完全忽略了它。

据我所知,WooCommerce产品类别小部件不支持过滤产品/类别。所以我知道没有挂钩或过滤器。

但是,您可以轻松地复制单个文件,并将其作为一个独立的小部件进行修改,而不会被WooCommerce升级改写。

希望这有帮助。

结束