我希望在网站上添加一个按钮,以便用户可以打开和关闭缺货商品。 默认情况下,我希望缺货商品为假。当用户浏览时,我需要他应用的设置保持一致。这可能吗?
这就是我现在所拥有的:
/*
* 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' => '>'
)
));
}
}
我还在侧栏上有一个按钮来切换状态。
目前,它并不一致
默认情况下不会隐藏缺货商品
非常感谢任何帮助。
答案 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中,因此遇到了已经发送的标头