有条件的隐藏定价;需要从标签/自定义分类法中可见

时间:2019-09-12 02:21:52

标签: woocommerce hook-woocommerce

  1. 隐藏产品定价并添加到购物车按钮,除非登​​录
  2. 如果从某种标签,类别或其他分类法访问过销售商品,则这些销售商品是可见的,是否登录的,因此除非明确将其定向,否则没人能看到销售。
    • 示例:所有产品价格均被隐藏,但带有“ waffles-sale”标签的URL除外。这是一个简单的示例,但我认为这可以解释我对2的追求。

我已经完成了1.使用一个插件,最近完成了一个简短的代码;这很棒:

add_action( 'init', 'bbloomer_hide_price_add_cart_not_logged_in' );

function bbloomer_hide_price_add_cart_not_logged_in() {   
if ( ! is_user_logged_in() ) {      
 remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
 remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
 remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
 remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );   
 add_action( 'woocommerce_single_product_summary', 'bbloomer_print_login_to_see', 31 );
 add_action( 'woocommerce_after_shop_loop_item', 'bbloomer_print_login_to_see', 11 );
}
}

function bbloomer_print_login_to_see() {
echo '<a href="' . get_permalink(wc_get_page_id('myaccount')) . '">' . __('Please login for pricing.', 'theme_name') . '</a>';
}

但是,这使我剩下两个,这使得有条件地使事物可见。如果这含糊不清,我感到抱歉。我已经在网上搜寻了答案,但是很快就会发现。我觉得我的词汇量使我退缩;我不了解我所描述的勾子或短语。我很想停止重新发明轮子(我必须克隆产品/产品类别,才能使它们仅在临时发布的销售页面上可见)。

有人能指出我正确的方向吗?以这种方式控制产品可见性是否可行?我将不胜感激,如果有人对此有更丰富的经验,或者对此有解决方案,请联系我们。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用此功能(未经测试),匆忙编写,但可以帮助您实现所需的功能。

您需要定义查询字符串,然后根据该查询字符串根据需要添加/删除操作。

使用get_query_string

// register query var
add_action('init','register_query_string');
function register_query_string() { 
    global $wp; 
    $wp->add_query_var('my_query_string_name'); 
}

//check if it's in the url
    if ( get_query_var('my_query_string_name') ) {
   // remove/add actions for the query string
   elseif ( !user_not_logged_in()){
   //something when not logged in 
  }
 }

如果您需要检查查询字符串并登录,可以执行类似的操作

 if ( !get_query_var('my_query_string_name') && ( !user_not_logged_in()){
 // insert magic here
 }

代码从您的子主题(或插件)进入functions.php。