在前端切换缺货商品 - woocommerce

时间:2018-06-18 15:25:16

标签: wordpress woocommerce custom-function

我希望在网站上添加一个按钮,以便用户可以打开和关闭缺货商品。 默认情况下,我希望缺货商品为假。当用户浏览时,我需要他应用的设置保持一致。这可能吗?

这就是我现在所拥有的:

/*
 * ADDING A SIMPLE BUTTON TO SHOW OR HIDE SOLD PRODUCTS
 * source: https://www.offshorly.com/news/woocommerce-show-hide-sold-products-toggle/
 */
function hide_sold_products_param() {
    global $wp;
    $wp->add_query_var('hide_sold_products');
}
add_filter('init', 'hide_sold_products_param');

add_action('pre_get_posts', 'hide_sold_products_query', 10);
function hide_sold_products_query($query){
    if($query->get('hide_sold_products') == 'true'){
        $query->set('meta_query', array(
            array(
            'key' => '_stock',
            'value' => '0',
            'compare' => '>'
            )
        ));
    }
}

我还在侧栏上有一个按钮来切换状态。

  • 目前,它并不一致

  • 默认情况下不会隐藏缺货商品

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我对此进行了更多研究,并提出了一个解决方案,它虽然不理想,但确实可以按照我想要的方式工作。我认为您的最大问题是,您需要将切换开关存储到用户会话中,以便在用户导航时将其保存。在header.php中,我添加了:

    if (isset($_GET['hide_sold_products']) && $_GET['hide_sold_products'] === 'true') {
        WC()->session->set( 'hide_sold_products', 1 );
    }

    if (isset($_GET['hide_sold_products']) && $_GET['hide_sold_products'] === 'false') {
        WC()->session->set( 'hide_sold_products', 0 );
    }

这将存储用户从?hide_sold_products = url变量中隐藏/显示的值。 同样,以下内容并不理想,但我会分享,并将其添加到header.php

<?php
if($wp->request == 'store'){
            $url = $wp->request;
        } else {
            $url = strstr($wp->request, '/', true);
        }
    if(!isset($_GET['hide_sold_products'])  && $url == 'store'){
        $currentUrl = "http://" . $_SERVER['HTTP_HOST'];
        $hide_sold_products = WC()->session->get( 'hide_sold_products' );
        if($hide_sold_products == 1){
            $hide_sold_products_text = 'true';
        } else {
            $hide_sold_products_text = 'false';
        }
?>
<script>
    window.location = "<?php echo $currentUrl . '/' . $wp->request . '/?hide_sold_products=' . $hide_sold_products_text; ?>";
</script>
<?php } ?>  

这将检查用户是否正在尝试访问woocommerce中的/ store / URL,然后将其重定向并从会话值中添加带有true / false的?hide_sold_products =,然后url调用functions.php脚本。同样在前端的切换按钮/文本上,需要将显示切换附加到该切换上:?hide_sold_products = false

除了JS重定向之外,这对我来说效果很好。我尝试了wp_redirect(),但由于代码位于header.php中,因此遇到了已经发送的标头