我想在woocommerce产品页面后端添加一个自定义复选框,该复选框在前端隐藏“添加到购物车”按钮。我不想删除完全购买商品的功能(仍然希望能够使用直接添加到购物车网址将商品添加到购物车并购买商品),所以我不想使用{{1 }}或类似的内容。
我目前实现的目标是:
添加自定义复选框
add_filter('woocommerce_is_purchasable', 'my_woocommerce_is_purchasable', 10, 2);
还有一个“隐藏添加到购物车”按钮,具体取决于类别摘要。
// Display Checkbox
add_action('woocommerce_product_options_general_product_data', 'product_custom_fields_add');
function product_custom_fields_add(){
global $post;
echo '<div class="product_custom_field">';
// Custom Product Checkbox Field
woocommerce_wp_checkbox( array(
'id' => '_no_addcart_product',
'desc' => __('show or hide add to cart', 'woocommerce'),
'label' => __('Hide Add To Cart', 'woocommerce'),
'desc_tip' => 'true'
));
echo '</div>';
}
// Save Checkbox
add_action('woocommerce_process_product_meta', 'product_custom_fields_save');
function product_custom_fields_save($post_id){
// Custom Product Text Field
$no_addcart_product = isset( $_POST['_no_addcart_product'] ) ? 'yes' : 'no';
update_post_meta($post_id, '_no_addcart_product', esc_attr( $no_addcart_product ));
}
以上两种方法都可以正常工作。如果复选框处于活动状态(我也不需要检查类别),那么我失败的地方就是尝试将它们组合在一起以删除添加到购物车按钮。我将下面的代码放在一起,希望它能工作,但不能。
function remove_product_description_add_cart_button(){
global $product;
$category = 'hide';
if ( has_term( $category, 'product_cat', $product->id ) )
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}
add_action('wp','remove_product_description_add_cart_button');
在此向正确的方向表示感谢。
答案 0 :(得分:4)
您可以通过以下方式将两个条件与相关的OR
参数结合起来:
add_action( 'woocommerce_single_product_summary', 'remove_product_add_to_cart_button', 4 );
function remove_product_add_to_cart_button(){
global $product;
$term_slug = 'hide'; // Product category term slug
if ( has_term( $term_slug, 'product_cat', $product->get_id() ) || $product->get_meta('_no_addcart_product') === 'yes' )
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}
代码进入您的活动子主题(或活动主题)的function.php文件中。应该可以。
注意:自Woocommerce 3起,无法直接访问
WC_Product
属性,因此您需要使用可用方法与WC_Product
对象$product
一起使用。
- 对于产品ID,您将使用
get_id()
方法,例如:$product->get_id()
- 对于产品自定义元数据,您还可以使用
get_meta()
方法