从woocommerce的短代码中删除添加到购物车按钮

时间:2015-11-09 19:40:53

标签: wordpress 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');

然而,新产品和新产品中仍有一些展示。畅销小部件。查看代码,我可以看到这些代码正在调用短代码

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

修改这些内容的最佳方法是什么,因此仅对登录用户显示“添加到购物车”按钮。显然,在模板中,我可以按照

的方式做一些事情
if(is_user_logged_in())
    echo do_shortcode('[add_to_cart id="'.$product->id.'"]');
}

但似乎应该有更好的方法?沿着一个钩子或什么的线?

3 个答案:

答案 0 :(得分: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中 它将隐藏价格并添加到购物车按钮并打印声明登录以查看价格

答案 1 :(得分: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 );
    }   
}

答案 2 :(得分: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 Action和Filter Hook    - https://docs.woothemes.com/wc-apidocs/hook-docs.html