2017-02-06 89 views
2

我有一些代码,阻止被显示在所有的产品,如果用户没有登录的价格。显示产品的价格,如果是会员或特定产品

我的问题是,我有1个产品这是免费的,我需要显示的价格,如果用户没有登录。

有人可以帮助我通过他的id目标该单一产品,并显示这个特殊的价格,即使用户没有登录。

这是我的原始代码funcions.php阻止价格来回m显示,当用户没有登录时:

// Hide prices on public woocommerce (not logged in) 
add_action('after_setup_theme','activate_filter') ; 
function activate_filter(){ 
    add_filter('woocommerce_get_price_html', 'show_price_logged'); 
} 
function show_price_logged($price){ 
    if(is_user_logged_in()){ 
     return $price; 
    } 
    else 
    { 
    remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart'); 
    remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10); 
    remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30); 
    remove_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10); 
    return '<a href="' . get_permalink(woocommerce_get_page_id('myaccount')) . '">Call for pricing</a>'; 
    } 
} 

谢谢。

+0

您是否一直希望显示价格的固定产品ID? – rcadhikari

+0

是的,我可以使用产品ID。 – MasterFuel

+0

在wordpress dev中重新发布。回购... http://wordpress.stackexchange.com/questions/255438/have-woocommerce-show-product-price-if-id-when-not-logged-in – MasterFuel

回答

0

清理了一下,并将您的条件测试抽象为名为so_42075748_hide_price()的自定义函数,该函数测试用户是否登录测试产品的价格是否大于零。我还过滤了woocommerce_is_purchasable,使这些产品完全不可购买给某些人,他们可能知道只需执行?add-to-cart=99即可将产品添加到购物车。

// Switch the Price HTML 
add_filter('woocommerce_get_price_html', 'so_42075748_hide_price_logged', 10, 2); 
function so_42075748_hide_price_logged($price, $product){ 
    if(so_42075748_hide_price($product)){ 
     // Not the ideal permalink in my opinion, but copying from original question. 
     $price = '<a href="' . get_permalink(woocommerce_get_page_id('myaccount')) . '">' . __('Call for pricing', 'your-textdomain') . '</a>'; 
    } 
    return $price; 
} 

// Make products completely unpurchasable 
add_filter('woocommerce_is_purchasable', 'so_42075748_is_purchasable', 10, 2); 
function so_42075748_is_purchasable($purchasable, $product){ 
    if(so_42075748_hide_price($product)){ 
     $purchasable = false; 
    } 
    return $purchasable; 
} 

// Hide add to cart buttons 
add_action('woocommerce_before_shop_loop_item', 'so_42075748_hide_prices'); 
add_action('woocommerce_before_single_product', 'so_42075748_hide_prices'); 
function so_42075748_hide_prices(){ 
    global $product; 

    if(so_42075748_hide_price($product)){ 
     remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart'); 
     remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30); 
    } 
} 

编辑:取得了较为完整的条件测试也考验,如果价格是零。

​​
+0

谢谢!它似乎工作,但是当我检查一个产品的变化,似乎显示的选项,但行为,如果物品缺货...与隐藏添加到购物车按钮所有在一起.. – MasterFuel

+0

实际上变量产品实际显示价格..是由于没有价格设定的事实?因为它是可变的。 – MasterFuel

+0

在我的回答中,我没有真正考虑可变产品太多,但是可变产品的价格是由它的变化决定的。你有什么价格的变化?你可以'var_dump($ product-> get_price())'''so_42075748_hide_prices()'函数中的某处吗?并让我知道那是什么意思。 – helgatheviking