我将产品ID数组(作为整数)传递给以下函数,该函数还接受当前的类别ID。这可以在WordPress / WooCommerce管理员的产品类别编辑屏幕上运行,并且基本上只是将多个产品分配给当前类别的一种快速方法。想法是将所有当前不在此类别中的产品分配给该类别。
这在一定程度上起作用。当我var dump产品对象时,它会显示新添加的类别,并且该类别在产品编辑屏幕中被打勾。但是,在前端上查看类别时,产品未显示。然后,进入站点管理员,编辑产品(无更改)并进行更新,然后将其显示在前端的类别中。因此,似乎需要先保存产品,然后产品才能显示出来,但事实并非如此,在以下功能中以编程方式保存产品时,该产品仍然无法正常工作。
我添加了一个if
语句,还将子级也添加到类别中,只是为了排除它,但这无济于事。
有人可以请我对此进行健全性检查吗?
function spc_assign_new_products($term_id, $product_ids)
{
$new_products = wc_get_products([
'limit' => -1,
'include' => $product_ids,
'status' => 'publish',
'tax_query' => [
[
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => [$term_id],
'operator' => 'NOT IN',
'include_children' => false,
]
],
]);
foreach ($new_products as $product) {
wp_set_object_terms($product->get_id(), (int) $term_id, 'product_cat', true);
if ($children = $product->get_children()) {
foreach ($children as $child_id) {
wp_set_object_terms($child_id, (int) $term_id, 'product_cat', true);
}
}
}
}
在管理员中单击“更新”之前和之后进行各种转储产品对象,除了修改的时间戳之外,没有其他任何区别,所以我很茫然。我还排除了缓存,在本地开发站点上完全禁用了缓存。