【问题标题】:Toggle out of stock items on front end - woocommerce在前端切换缺货商品 - woocommerce
【发布时间】:2018-06-18 15:25:16
【问题描述】:

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

这是我到现在为止的:

/*
 * 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' => '>'
            )
        ));
    }
}

我在侧边栏也有一个按钮来切换状态。

  • 目前不一致

  • 默认不隐藏缺货商品

非常感谢任何帮助。

【问题讨论】:

  • 这有什么更新吗?我也在寻找解决方案
  • 我现在不想写一个解决方案,但我希望这对你有帮助,如果可以的话,也许我会写一个答案。我今天刚刚开发了一个插件来实现这一点,它需要用户登录,并通过在管理顶部栏添加一个按钮来提供该功能。 Toggle Stock Plugin 还有@ChadPriddle

标签: wordpress woocommerce custom-function


【解决方案1】:

我对此进行了更多研究并提出了一个解决方案,它并不理想,但它确实按照我想要的方式工作。我认为您最大的问题是您需要将打开/关闭切换存储到用户会话中,以便在他们导航时保存它。在 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 中

【讨论】:

    猜你喜欢
    • 2012-09-02
    • 1970-01-01
    • 2021-08-31
    • 2019-09-04
    • 2023-03-30
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多