我正在使用以下代码向产品添加属性:

$product_attr = get_post_meta(2, '_product_attributes',true);
      
      $product_attr["pa_product-type"] = [
        'name' => "pa_product-type",
        'value' => '',
        'is_visible' => '0',
        'is_taxonomy' => '1'
        ];  
        
    wp_set_object_terms(2, "Caps", pa_product-type , true );
    update_post_meta(2, '_product_attributes', $product_attr);

该属性正在产品中成功更新,并显示在产品编辑页面中.但是,在wp_wc_product_attributes_lookup表中,属性值没有更新.使用上面的代码更新/添加属性后,如何在该表中触发更新?

推荐答案

这是一个非常有趣的问题!

wp_wc_product_attributes_lookup表用于提高WooCommerce的性能,并且通常会自动更新.有一个处理产品属性重新生成过程的类DataRegenerator.但如果您直接更改wp_postmeta中的属性,如下所示:

    $product_id = 46;
    $product_attr = get_post_meta($product_id, '_product_attributes',true);

    $product_attr["pa_color"] = [
        'name' => "pa_color",
        'value' => '',
        'is_visible' => '0',
        'is_taxonomy' => '1'
    ];

    wp_set_object_terms($product_id, "Blue", 'pa_color' , true );
    update_post_meta($product_id, '_product_attributes', $product_attr);

则不会立即更新wp_wc_product_attributes_lookup表.

但您可以使用LookupDataStore类手动触发此更新.

首先,您添加

use Automattic\WooCommerce\Internal\ProductAttributesLookup\LookupDataStore;

在您的函数之外,例如,在插件或主题php文件的顶部或恰好在您的add_action行之上.

然后,您可以调用该函数在查找表中为特定的product_id创建产品属性


    $lookupDataStore = new LookupDataStore();
    $lookupDataStore->create_data_for_product($product_id);

Source

Php相关问答推荐

谷歌云SQL / mysql谁是对的?

打印SQL表内容时在DIV内添加断点

如何在Woocommerce中禁用机器人添加到推车?

WooCommerce产品按特定元数据的自定义数字排序选项

PHP:PHP手册-Manual

在WooCommerce获取所有具有全球产品属性品牌的简单产品

WooCommerce中基于用户角色的不同产品差价

根据WooCommerce中的自定义用户元数据值更改用户角色

Azure应用程序无法访问共享文件夹

htaccess 配置提供静态文件和动态文件

在 PHP 中将字符串分解为数组(字符串类似于 WP 短代码)

laravel Eloquent 模型的问题

图片上传成功

Composer自动加载器重复了子类的类文件路径

如何在PHP中对多个脚本调用进行排队?

php/html OnSubmit 禁用输入类型提交未给出预期结果

PHP 中是否有 is_closure() 函数?

如何故意创建不同的错误(404,500,419)? Lavravel PHP

如何使用属性创建属性预设?

Laravel 响应 html 默认页面忽略控制器