0

我将一个产品 ID 数组(作为整数)传递给下面的函数,该函数也接受当前的类别 ID。这在 WordPress/WooCommerce 管理员的产品类别编辑屏幕上运行,基本上只是将多个产品分配给当前类别的一种快速方法。这个想法是,当前不在此类别中的任何这些产品都被分配到该类别。

这在一定程度上起作用。当我转储产品对象时,它显示新添加的类别,并且在产品编辑屏幕中勾选了该类别。但是,在前端查看类别时,产品没有显示出来。然后,进入站点管理员,编辑产品(没有更改)并更新它,然后将其显示在前端的类别中。因此,似乎需要在产品出现之前对其进行保存,但事实并非如此,并且在以编程方式将产品保存在以下函数中时仍然无法正常工作。

我添加了一条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);
            }
        }
    }
}

在管理员中点击更新之前和之后的 Var 转储产品对象除了修改的时间戳之外没有显示任何差异,所以我很茫然。我还排除了缓存,在本地开发站点上完全禁用了它。

4

0 回答 0