2015-11-09 112 views
0

我正在实施一个商店,只允许登录用户查看添加到购物车按钮。移除添加到购物车按钮从woocommerce中的简码

我已经成功地隐藏他们大多用下面的代码:

function thread_remove_loop_button(){ 
    if(!is_user_logged_in()){ 
     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); 
    } 
} 
add_action('init','thread_remove_loop_button'); 

然而,仍然有新产品&畅销商品widget的若干表现。查看代码,我可以看到这些呼叫的简码

do_shortcode('[add_to_cart id="'.$product->id.'"]'); 

什么是修改这些的最佳途径,因此添加到购物车按钮只显示已登录的用户。显然在模板中,我可以做一些沿线

if(is_user_logged_in()) 
    echo do_shortcode('[add_to_cart id="'.$product->id.'"]'); 
} 

但它似乎应该有一个更好的办法?沿着钩子什么的?

回答

0

添加到购物车模板函数是可插入的,这意味着如果您在主题中使用相同名称定义函数,它将覆盖WooCommerce的功能。

function woocommerce_template_loop_add_to_cart($args = array()) { 
    if(is_user_logged_in()){ 
     wc_get_template('loop/add-to-cart.php' , $args); 
    } 
} 
0

您需要使用不影响其他代码的挂钩。

add_action('init', 'hide_add_cart_not_logged_in'); 

function hide_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); 
} 
} 

只允许登录用户查看添加到购物车按钮。

在这里你可以得到WooCommerce行动和过滤钩子 - https://docs.woothemes.com/wc-apidocs/hook-docs.html

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(woocommerce_get_page_id('myaccount')) . '">' . __('Login to see prices', 'theme_name') . '</a>'; 
} 

把这个在你的插件/ woocommerce/woocommerce.php 它会隐藏价格,并添加到购物车按钮,打印一份声明登录查看价格

相关问题