使用分层导航小工具时,如何阻止缺货商品出现在我的WooCommerce站点上

时间:2012-09-26 作者:Jodi Warren

WooCommerce包含一个方便的分层导航小部件。这允许您根据设置的属性过滤目录项,包括项目的变化(如不同的大小)

但是,如果您选择了一个缺货的变体,它仍然会被返回。我一直在尝试修改小部件代码,但事实证明这对我的小脑袋来说极其复杂。

以下是小部件代码:https://github.com/woothemes/woocommerce/blob/master/widgets/widget-layered_nav.php

如果有人能提供任何建议,我们将不胜感激。

2 个回复
最合适的回答,由SO网友:Jodi Warren 整理而成

以下代码适用于WooCoommerce 1。x-它不太可能在任何最新版本上工作,我非常鼓励您not to bother trying to use it. 我也强烈建议你don\'t 降级至WooCommerce 1。x以使用此代码。

这并不容易,但我和一位同事做到了。

其中一些是特定于我们的用例的,在较大的目录上不会表现得很好,但在技术上是可行的。由于在提取项目之前无法判断情况是否如此,因此我们在一个页面上显示所有项目,只需在缺货项目上显示:无。同样,这是一种变通方法,但符合我们的目的。

function product_in_stock($post, $product) {
    if ($_GET[\'filtering\'] == 1 && $_GET[\'filter_size\'] > 0 ) {
        $STOCK = FALSE;
        $slugmap = array();
        $attribs = $product->get_variation_attributes();
        $terms = get_terms( sanitize_title( \'pa_size\' ));
        if($terms)foreach($terms as $term)$slugmap[$term->slug]=$term->term_id;
        $available = $product->get_available_variations();
        if($available)foreach($available as $instockitem){
            if(isset($instockitem["attributes"]["attribute_pa_size"])){
                if(isset($slugmap[$instockitem["attributes"]["attribute_pa_size"]])){
                    if($slugmap[$instockitem["attributes"]["attribute_pa_size"]] == $_GET["filter_size"]){
                        $STOCK = TRUE;
                    }
                }
            }
        }
        return $STOCK;
    } else {
        return true;
    }
}

function check_if_out_of_stock(){
    global $post,$product;
    $stock = product_in_stock($post,$product);

    $output = \'<div class="\';
    $output .= $stock?"instock":"outofstock";
    $output .= \'">\';
    echo $output;
}

add_action( \'woocommerce_before_shop_loop_item\', \'check_if_out_of_stock\');

function close_out_of_stock(){
    echo "</div>";
}

add_action( \'woocommerce_after_shop_loop_item\', \'close_out_of_stock\');

SO网友:raison

//通用woocommerce缺货-可能会帮助某人

            function product_in_stock($post, $product) {

                    if (!$product->is_in_stock()) {

                        $STOCK = TRUE;
                        return $STOCK;

                } else {
                    return false;
                }
            }

            function check_if_out_of_stock(){
                global $post,$product;
                $stock = product_in_stock($post,$product);

                $output = \'<div class="\';
                $output .= $stock?"instock":"outofstock";
                $output .= \'">\';
                echo $output;
            }

            add_action( \'woocommerce_before_shop_loop_item\', \'check_if_out_of_stock\');

            function close_out_of_stock(){
                echo "</div>";
            }

结束

相关推荐

Wp-content/plugins中的权限问题

我在本地机器上安装了一个WP,试图用插件弄脏我的手。我希望从github克隆一个包含此插件代码的项目。然而,我没有插件内部的权限,作为一个没有su权限的普通用户,我无法做到这一点。(当然,我可以成为根并这样做,但我不认为这是应该的)。然后,默认情况下,WP安装中的文件夹将组设置为“tape”,这对我来说很奇怪。本地WP安装上内部文件夹的正确权限应该是什么?