我在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
试图在测试服务器上测试您的代码,但您的预订产品未在后端显示。
您的问题可能出在这里:我认为您正在使用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文件上测试了此代码。
— @ 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] 删除。
我来说两句