gpt4 book ai didi

php - 根据 WooCommerce 中的产品自定义字段和产品类别隐藏添加到购物车按钮

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:24 24 4
gpt4 key购买 nike

我想在 woocommerce 产品页面后端添加一个自定义复选框,以隐藏前端的“添加到购物车”按钮。我不想完全删除购买商品的能力(仍然希望能够使用直接添加到购物车 url 将商品添加到购物车并购买)所以我不想使用 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');

以上两项都可以单独使用。我失败的地方是尝试将它们组合起来只是为了在复选框处于事件状态时删除添加到购物车按钮(我也不需要检查类别)。我将下面的代码放在一起,希望它能起作用,但它不起作用。

function remove_product_description_add_cart_button() {
if ( is_product() && get_post_meta( $post->ID, '_no_addcart_product', true ) == 'yes' ) {
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}

add_action('wp','remove_product_description_add_cart_button');

非常感谢在正确方向上提供的任何帮助。

最佳答案

您可以通过这种方式将两个条件与关系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 文件。它应该有效。

Note: Since Woocommerce 3 the WC_Product properties can't be accessed directly so you need to use the available methods with the WC_Product Object $product.

  • For the product ID you will use get_id() method like: $product->get_id()
  • For product custom meta data you can also use get_meta() method

关于php - 根据 WooCommerce 中的产品自定义字段和产品类别隐藏添加到购物车按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54840456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com