gpt4 book ai didi

php - Woocommerce - 如何在插件中检查产品类型

转载 作者:IT王子 更新时间:2023-10-28 23:53:35 27 4
gpt4 key购买 nike

我是 wordpress/woocommerce 的新手,刚开始尝试创建自定义插件。

到目前为止,我已经通过 api 添加了我的自定义 woocommerce 设置。

我遇到了一个问题,我想在产品数据选项卡中的单个产品上添加自定义字段。

我设法使用以下代码显示它:

add_action( 'woocommerce_product_options_general_product_data', array( $this, 'cuzd_general_fields' ) );
add_action( 'woocommerce_process_product_meta', array( $this, 'cuzd_general_fields_save') );

但是现在我需要检查产品类型是简单的还是变化的。我尝试了以下方法:

$product = new WC_Product( get_the_ID() );
if( $product->is_type( 'simple' ) ) {
//
}

但是我得到一个错误:

 Fatal error: Class 'WC_Product' not found in ....

我有一种很好的感觉,我正在尝试在 Product 类被调用之前启动它。我很可能把类插件的整个格式弄错了。任何具有良好指导/最佳实践的阅读 Material 将不胜感激。

否则,如果以上是一个简单的修复,请告诉我。

最佳答案

您最早可以期望访问任何 Woo 类的是 woocommerce_loaded Hook ,它现在在 plugins_loaded Hook 中触发。如果您保存在 woocommerce_process_product_meta Hook 上,那么那里的任何回调都会正确加载所有类。如果您在该回调之外进行测试(并且根本没有附加到任何 Hook ......可能无法正确加载所有类。

此外,如果您试图在 WP_Post 对象设置之前调用 get_the_ID(),您将无法获得正确的值。

一个更完整的 cuzd_general_fields_save 例程如下所示:

/**
* Save meta box data.
*
* @param int $post_id WP post id.
*/
public function cuzd_general_fields_save( $post_id ) {

$_product = wc_get_product( $post_id );

if( $_product->is_type( 'simple' ) ) {
// do stuff for simple products
} else {
// do stuff for everything else
}

$_product->save();

}

Woo 3.0 的更新是使用 woocommerce_admin_process_product_object 因此您不再需要实例化产品对象或运行 save() 因为 Woo 将在核心中处理它.

add_action( 'woocommerce_admin_process_product_object', array( $this, 'cuzd_general_fields_save') );

然后回调将被修改为:

/**
* Save meta box data.
*
* @param obj $_product WC_Product.
*/
public function cuzd_general_fields_save( $_product ) {

if( $_product->is_type( 'simple' ) ) {
// do stuff for simple products
} else {
// do stuff for everything else
}

}

关于php - Woocommerce - 如何在插件中检查产品类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26766257/

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