如何摆脱具有未指定属性的变体

时间:2021-01-12 作者:Kristián Filo

我的一些产品有这些奇怪的变化,但属性不明确(我在商店里使用的是尺寸和颜色)。看起来是这样的:

enter image description here

因此,如果您要购买85 B的黑色变体产品(ID 111224),实际上订单将包含未指定属性的变体(ID 112392),因为它更高。这是一个巨大的问题,因为这些未指定的变体包含错误的SKU和附加数据。

我正在使用WP All Import导入和更新产品,我怀疑插件(或我的设置)会造成这种混乱,我会看看它。然而,我在商店里有数千种产品,手动删除它们是不可能的。是否有办法删除至少有一个未指定变体的变体?

我尝试使用此tax\\u查询查询此类产品变体:

\'tax_query\' = array(
    \'relation\' => \'OR\',
    array(
        \'taxonomy\'         => \'pa_size\',
        \'terms\'            => array(\'\'),
        \'field\'            => \'slug\',
        \'operator\'         => \'IN\',
    ),
    array(
        \'taxonomy\'         => \'pa_color\',
        \'terms\'            => array(\'\'),
        \'field\'            => \'slug\',
        \'operator\'         => \'IN\',
    ),
);
但是查询没有返回任何内容。当我试图将空字符串作为“term”数组中的值传递时,它不起作用。我还尝试使用“=”运算符和空字符串(不是数组)作为值。

顺便说一下,我已经检查了这些空属性是否真的是空字符串,是的,它们是。此代码:

$product = wc_get_product(112392);
$atts = $product->get_attributes();
    
foreach($atts as $att) {
    echo gettype($att) . \' : \' . $att .  \'<br>\';
}
输出:

string : 
string : 
而对于正确的变化(例如111224),它输出:

string : 85-b
string : black
你知道我怎样才能摆脱他们吗?我可以查询所有的产品变体,循环浏览它们并删除所有空的。可能会重复几次(基于执行时间),但这似乎不是一个好的解决方案,它的性能非常昂贵-同样的问题也可能在将来出现,我希望有一个快速的解决方案,只查询中断的变体。

非常感谢你。

1 个回复
最合适的回答,由SO网友:Kristián Filo 整理而成

我成功地编写了一个SQL查询,该查询将获取所有产品变体IDdo not have both size and color 设置(wp\\U Posteta表中不存在)。之后,我只需要遍历这些ID并使用wp_delete_post. 以下是查询:

SELECT p.ID 
FROM wp_posts p 
LEFT JOIN wp_postmeta pm 
ON p.ID = pm.post_id 
WHERE p.post_type = \'product_variation\' 
AND (pm.post_id NOT IN (SELECT post_id FROM wp_postmeta WHERE meta_key = \'attribute_pa_size\' OR meta_key = \'attribute_pa_color\')) 
GROUP BY ID 
对我的案子很有效。我最初问的是至少有一个属性未指定的变体,但结果不是这样,我必须寻找两个属性都为空的变体。

相关推荐