当前位置: 首页 > 知识库问答 >
问题:

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

白浩荡
2023-03-14

我是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 ....

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

否则,如果以上是一个简单的修复,请让我知道。

共有3个答案

楚雪松
2023-03-14

一个简单的方法是简单地检查发布的选择的值。然后你可以:

$product_type = $_POST['product-type'];

if ( $product_type == 'simple' ) {
 // do what you want
}

夹谷野
2023-03-14

以下是一种在不创建产品实例的情况下检查产品类型的方法:

$product_type = get_the_terms( $product_id,'product_type')[0]->slug;
谈炳
2023-03-14

最早可以访问任何Woo类的是woocommerce\u loadedhook,它现在在plugins\u loadedhook中启动。如果您保存在woocommerce\u process\u product\u meta钩子上,那么那里的任何回调都会正确加载所有类。如果您在该回调之外进行测试(并且根本没有连接到任何钩子上),则可能无法正确加载所有类。

此外,如果您试图在设置WP\u Post对象之前调用get\u 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\u admin\u process\u product\u object,这样您就不再需要实例化product对象或运行save(),因为Woo将在core中处理它。

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
    }

}
 类似资料:
  • 我需要一个代码来检查woocommerce产品类型是否不是“变量” 为了检查某物是否是可变产品,我通常使用这个: 但我需要检查它是否不是一个变量产品,所以我认为我应该这样做,但这会导致PHP错误。。。 编辑:我得到以下错误:"致命错误:未捕获错误:调用成员函数is_type()在空" 我以为我的代码有问题。但后来我在其他模板文件中测试了它,它成功了。我想在functions.php中使用我的php

  • 似乎WooCommerce产品的搜索功能没有检查“产品标签”分类术语,也没有检查SKU字段?我将SKU作为产品标签添加到它们各自的产品中,但当我搜索SKU时,它仍然没有返回任何内容。。。。如何使搜索功能检查产品标签术语?我尝试了很多方法,从添加tax\u查询到pre\u get\u post过滤器,再到一个全新的WP\u查询循环,由于某种原因,它无法搜索产品标签。。。。那么,产品标签的意义是什么呢

  • 在kotlin类中,我将方法参数作为类类型T的对象(请参见此处的kotlin文档)。当我调用方法时,我将传递不同的类作为对象。在Java中,我们可以使用对象的来比较类是哪个类。 所以我想在运行时检查和比较它是哪个类? 如何在Kotlin中检查类?

  • 问题内容: 我用这段代码检查图像的类型, 但是有些用户抱怨上传任何类型的图像时都会出错,而另一些用户则没有错误! 我想知道这是否可以解决问题: 任何意见? 问题答案: 永远不要使用。其中包含的信息完全未经验证,它是用户定义的值。自己测试类型。对于图像,通常是一个不错的选择: 另外,如果您的服务器支持这些功能,则它们的功能很棒。

  • 我有一个自定义的事件在我的bukkit/龙头插件,扩展PlayerInteract事件,试图打开箱子在附近的地区周围的球员。 目前代码使用这个事件来确保没有其他插件(例如悲伤预防)反对玩家打开箱子。如果玩家可以打开箱子,我的插件会尝试将物品放入箱子。我想忽略< code>setCancelled(),如果它被某个插件(理想情况下)或类(作为一种解决方法)调用的话 从这个问题中我可以看出,要获得我可

  • 我至少有4个父类别,每个父类别都有一个子类别。 WordPress中的类别如下所示: > 利丁ö(父类别) Direktåtkomst Förrådslänga(子类别) 1kbm(产品) 1.5千伏安(产品) Nacka(父类别) 样本(子类别) aa(产品) bbb(产品) 我想查询WordPress中的产品,它们应该按类别分组。 这是我当前的代码: 我认为上面的代码不正确,因为每个分页都显示