WooCommerce自定义产品类型-多个添加到购物车部分的问题

亚当

我在woocommerce中创建了一个名为Booking的自定义产品类型。

这是我的代码:

class WC_Product_Booking extends WC_Product{
    /**
     * __construct function.
     *
     * @access public
     * @param mixed $product
     */
    public function __construct( $product ) {
        $this->product_type = 'booking';
        $this->supports[]   = 'ajax_add_to_cart';
        parent::__construct( $product );
        add_action('woocommerce_booking_add_to_cart', array($this, 'add_to_cart'),30);
    }

    private function show_pricing_fields(){
      ?><script type='text/javascript'>
        jQuery( document ).ready( function() {
          jQuery( '.options_group.pricing' ).addClass( 'show_if_booking' ).show();
        });
      </script><?php
    }
    /**
     * Display the add to cart button (same as for simple product)
     */
    public function add_to_cart() {
      wc_get_template( 'single-product/add-to-cart/simple.php' );
    }
}

现在唯一的问题是产品页面上的“添加到购物车”部分显示了6次,但我不知道为什么。

我该如何解决这个问题?

谢谢


@Update…解决方案 (就像LoicTheAztec使我走上了正确的轨道)

我已经找到了解决此问题的方法,使用此代码

if (! function_exists( 'woocommerce_booking_add_to_cart' ) ) {

  /**
  * Output the simple product add to cart area.
  *
  * @subpackage Product
  */

  function booking_add_to_cart() {
    wc_get_template( 'single-product/add-to-cart/simple.php' );
  }

  add_action('woocommerce_booking_add_to_cart',  'booking_add_to_cart');
}

关键是这个动作 add_action('woocommerce_booking_add_to_cart', 'booking_add_to_cart');

将“添加到购物车”按钮一次放置在正确的位置-要在您自己的自定义产品中使用该按钮,请执行以下操作: woocommerce_YOURPRODUCTTYPE_add_to_cart

LoicTheAztec

试图在测试服务器上测试您的代码,但您的预订产品未在后端显示。

您的问题可能出在这里:我认为您正在使用public function add_to_cart()现有的名称功能,因此必须以不同的方式对其进行重命名。

然后,我基于该线程重新访问了您的代码

扩展WC_Product_Simple而不是WC_Product可能更好,因为您的产品使用简单的产品添加到购物车按钮模板:
single-product/add-to-cart/simple.php

使用此自定义代码,我不会像您一样面对多个添加到购物车部分。

— @ Update1 —
但您仍然可以保持WC_Product扩展而不是WC_Product_Simple这样,按照您的评论要求,您的产品类型将"simple_booking"与第一功能和第二功能中指定的一样。这并不意味着您的产品很简单(这只是您可以更改的标语,并且可以在两个地方同时更改)。

因此,我再次修改了代码并进行了测试:它可以工作……

这是我使用(并且已经测试过)的代码

/**
 * Register the custom product type after init
 */
function register_simple_booking_product_type() {

    /**
     * This should be in its own separate file.
     */
    class WC_Product_Booking extends WC_Product{ // <= changed back to WC_product class

        public function __construct( $product ) {

            $this->product_type = 'simple_booking';
            $this->supports[]   = 'ajax_add_to_cart';

            parent::__construct( $product );

            // As we extend simple product class, you may not need this anymore.
            add_action('woocommerce_booking_add_to_cart', array($this, 'simple_booking_add_to_cart'),30);

        }

    }

}
add_action( 'init', 'register_simple_booking_product_type' );

// Registering the slug name (YOU can CHANGE IT)
function add_simple_booking_product( $types ){

    // Key should be exactly the same as in the class product_type parameter
    $types[ 'simple_booking' ] = __( 'Simple booking' );

    return $types;

}
add_filter( 'product_type_selector', 'add_simple_booking_product' );

/**
 * Show pricing fields for simple_booking product.
 */
function simple_booking_custom_js() {

    if ( 'product' != get_post_type() ) :
        return;
    endif;

    ?><script type='text/javascript'>
        jQuery( document ).ready( function() {
            jQuery( '.options_group.pricing' ).addClass( 'show_if_simple_booking' ).show();
        });
    </script><?php
}
add_action( 'admin_footer', 'simple_booking_custom_js' );

// Not sure you will need that (because of the change of the extended class)
function simple_booking_add_to_cart() {
    wc_get_template( 'single-product/add-to-cart/simple.php' );
}

在活动子主题(或主题)中的function.php文件上测试了此代码

参考:添加自定义WooCommerce产品类型


— @ Update2 —解决方案 (由该问题的作者查找)

要将添加到购物车按钮放置在正确的位置一次(要在您自己的自定义产品中使用该按钮,请执行称为的操作woocommerce_YOURPRODUCTTYPE_add_to_cart),并使用以下代码:

if (! function_exists( 'woocommerce_booking_add_to_cart' ) ) {

  /**
  * Output the simple product add to cart area.
  *
  * @subpackage Product
  */

  function booking_add_to_cart() {
    wc_get_template( 'single-product/add-to-cart/simple.php' );
  }

  add_action('woocommerce_booking_add_to_cart',  'booking_add_to_cart');
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据产品类型,WooCommerce的“添加到购物车”按钮旁边的“自定义”按钮

在WooCommerce中为特定产品类别自定义“添加到购物车”按钮

自定义特定 WooCommerce 产品类别上的“添加到购物车”按钮

自定义添加到购物车按钮以将多个产品添加到购物车中,数量为:woocommerce

将多个自定义数据数组添加到WooCommerce自定义Ajax上的购物车项目中添加到购物车

如果尚不在购物车中,请将多个产品添加到购物车

将自定义产品计算价格添加到Woocommerce购物车

将可变产品的自定义属性添加到WooCommerce中的购物车

单个Woocommerce产品自定义变体添加到购物车按钮

根据WooCommerce产品自定义库存状态禁用添加到购物车按钮

Woocommerce 产品添加到购物车自定义数据 img

在WooCommerce 4中以编程方式从自定义产品类型添加新产品

根据WooCommerce产品类型更改添加到购物车按钮和文本

WooCommerce 重定向添加到购物车以结帐特定产品类型

在WooCommerce中将自定义标签添加到特定产品类型的单个产品页面

将产品添加到Woocommerce单个产品页面上的购物车后,激活自定义按钮

如何在 Woocommerce 的自定义产品类型中添加变体选项卡?

WooCommerce添加到购物车,从自定义选择字段中添加第二个产品

如果购物车包含特定的Woocommerce产品类别,请阻止添加到购物车

设置自定义添加到购物车默认数量(Woocommerce 购物车页面除外)

通过WooCommerce产品设置中的自定义复选框禁用添加到购物车按钮

根据 Woocommerce 中的自定义字段替换特定产品的 ajax 添加到购物车

将具有自定义定价的产品添加到购物车时出错-WooCommerce

禁用 WooCommerce 产品添加到购物车以获得特定的自定义分类术语元值

在Woocommerce中的产品自定义循环上启用Ajax添加到购物车按钮

WooCommerce通过共同购物车插件添加到购物车产品

将产品添加到购物车WooCommerce?

根据用户国家和产品 ID 自定义添加到购物车按钮

使用自定义信息和价格将产品添加到购物车