以编程方式设置WooCommerce产品类别,可以正常工作,但产品未在Cat中显示

时间:2020-10-20 17:38:05

标签: php wordpress woocommerce wordpress-admin

我将产品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);
            }
        }
    }
}

在管理员中单击“更新”之前和之后进行各种转储产品对象,除了修改的时间戳之外,没有其他任何区别,所以我很茫然。我还排除了缓存,在本地开发站点上完全禁用了缓存。

0 个答案:

没有答案
相关问题