我已经创建了一个基于内置变量product type的自定义WooCommerce产品类型。我想拥有产品变体和特定于我的产品类型的自定义特征和字段。这是所有工作和显示在管理和我的自定义前端产品页面模板良好。
这是我的定制产品,供参考:
add_action( 'init', 'register_book_type' );
function register_book_type () {
class WC_Product_Book extends WC_Product_Variable {
public function __construct( $product ) {
parent::__construct( $product );
}
public function get_type() {
return 'book';
}
}
}
但是,当我将产品及其变体发布到购物车时,行为会出现混乱,因为代码$adding\u to\u cart-
这是给我带来麻烦的内置商业区:
$add_to_cart_handler = apply_filters( 'woocommerce_add_to_cart_handler', $adding_to_cart->get_type(), $adding_to_cart );
if ( 'variable' === $add_to_cart_handler || 'variation' === $add_to_cart_handler ) {
$was_added_to_cart = self::add_to_cart_handler_variable( $product_id );
} elseif ( 'grouped' === $add_to_cart_handler ) {
$was_added_to_cart = self::add_to_cart_handler_grouped( $product_id );
} elseif ( has_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler ) ) {
do_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler, $url ); // Custom handler.
} else {
$was_added_to_cart = self::add_to_cart_handler_simple( $product_id );
}
问题似乎是我自己的
get\u type()
方法在代码需要“变量”时返回“book”。我需要它返回“book”,以便产品编辑页面能够正确识别该类型。
我知道我可以在自己的代码中删除并替换
add\u to\u cart\u action()
函数,以覆盖此行为并添加自定义类型,但是我无法调用WC\u Form\u处理程序
类中的所有其他私有方法。还是可以重写整个类。。?
有没有其他方法可以绕过这一切,让我的基于变量的自定义产品进入购物车?
我就是这样解决这个问题的:
public function get_type()
{
return get_current_screen()->id === 'product' ? 'book' : parent::get_type();
}
这将在编辑产品页面上返回book
,但在其他地方返回variable
。
我相信您可以更改处理程序,告诉WooCommerce使用变量产品处理程序,方法是过滤woocommerce_add_to_cart_handler
,如下所示:
function kia_custom_add_to_cart_handler( $handler, $adding_to_cart ){
if( $handler == 'book' ){
$handler = 'variable';
}
return $handler;
}
add_filter( 'woocommerce_add_to_cart_handler', 'kia_custom_add_to_cart_handler', 10, 2 );
或
您可以将默认变量产品处理程序添加到自定义woocommerce_add_to_cart_handler_$type
钩子中,如下所示:
add_action( 'woocommerce_book_add_to_cart', 'woocommerce_variable_add_to_cart' );
我正在尝试将我的WooCommerce档案页面上特定产品类别的add to cart按钮更改为“Read More”按钮,该按钮将链接到产品页面(但不链接到单个产品页面本身)。 使用“将添加到购物车按钮替换为WooCommerce 3中的shop pages中的read more链接到product页面”的答案代码,如何将其限制为仅有一个产品类别(本例中术语名称为“Classs”)? 感谢任何帮助
我正在尝试为variations父产品创建一个单独的add to cart按钮。我正在使用以下方法访问产品数据: 谢谢你。
我经营一家Woocommerce商店,该商店也提供免费产品(_常规价格=0)。客户必须选择数量并将其添加到购物车中,然后下订单才能收到产品。但这并不是Woocommerce的工作原理,它隐藏了所有价格为0的产品的“添加到购物车”链接。并且不会在购物车页面中显示它们。有没有解决这个问题的办法?非常感谢。
在Woocommerce中,我需要在添加产品时跳过购物车页面,并直接重定向到仅限订阅产品类型的签出。 我在其他地方找到了下面的代码,它适用于跳过基于产品ID的购物车页面,但是我不能正确地使用产品类型(请参阅下面我尝试的内容)。 我尝试的:(它破坏了整个网站:变成了一个blanc页面) 有没有办法做到这一点?
我使用WooCommerce Wordpress中的以下代码,通过一个模板,使用add_to_cart($product_id)功能添加了许多产品。 现在,我希望通过此模板为每个产品添加自定义价格。现在购物车中的价格和数据库中的价格一样,但我想通过这一点添加我的自定义价格。有人能帮我做同样的事吗。谢谢
我见过很多例子,都是用客户价格将商品添加到WC购物车中,但没有一个是动态添加的。我正在尝试在一个接收POST变量的短代码函数中执行。。。。 这当然会将项目添加到购物车,但价格为零,我意识到我需要以某种方式将此数组保存回WC购物车数据。这种方法是可能的还是只能通过过滤器或操作钩子来完成?如果是这样,我如何保存改变的数组回到购物车的内容,或使其工作添加一个项目与公布的价格?非常感谢任何指导。 感谢do