在Woocommerce 3中更新产品可见性

时间:2018-05-31 22:16:00

标签: php wordpress methods woocommerce product

我正在使用几个带有woocommerce / wordpress的插件来制作它,以便我的每个产品版本都会在我的产品列表中显示为单独的产品,但每种颜色中只有一种设置为显示(所以如果我有产品有3种尺寸和3种颜色,共有9种产品,但由于每种颜色中只有一种可见,因此列表中只显示3种产品。我写了一个脚本,当目前可见的产品缺货时,它会将可见性设置转移到相同颜色的下一个产品。

我遇到的问题是,即使一切正常,产品也不会显示在产品列表中,直到我进入管理端,编辑产品,将可见性设置更改为隐藏和然后回到显示(这样它让我点击保存按钮,实际上没有任何东西从加载页面时改变),然后点击保存,它显示为它应该的。

所以我必须丢失正在查询的数据库中的内容,但是我不知道是什么,在管理端点击保存之前和之后,帖子和post_meta表看起来都相同。唯一更改的字段是post_meta表中的_edit_lock字段。

以下是我编写的用于传输可见性设置的脚本的一部分,我最初遇到此问题并发现这是因为产品仍然标记为缺货,所以我最后添加了该行,它似乎正在工作,但现在其他东西正在造成它:

    ...
    // $child_id is the product that the visibility settings are being transferred to, it should at this point be hidden
    // $visibility is the settings of the product that was visibile


    // swap visibility settings of the products
    $child_visibility = get_post_meta($child_id,"_visibility",true);
    update_post_meta($product->get_id(),"_visibility",$child_visibility);
    update_post_meta($child_id,"_visibility",$visibility);


    // copy color taxonomies over in case they were not entered 
    // this saved time so that the admin only had to enter taxonomy information on the visible products
    $terms = get_the_terms( $product->get_id(), 'product_color');
    $termArray = array();
    foreach($terms as $term) {
        $termArray[] = $term->name;
    }
    wp_set_object_terms( $child_id, $termArray, 'product_color', false );

    // i dont remember what this was for
    delete_transient( 'jck_wssv_term_counts' );

    // make sure new item is not marked out of stock
    wp_remove_object_terms( $child_id, 'outofstock', 'product_visibility' );
    wp_remove_object_terms( $child_id, 'exclude-from-catalog', 'product_visibility' );

1 个答案:

答案 0 :(得分:2)

自Woocommerce 3以来,产品可见性现在由术语'product_visibility''exclude-from-catalog'的{​​{1}}自定义分类法处理......请参阅this threadthis one

所以你应该用这种方式代替WC_Product CRUD setter methods set_catalog_visibility()

'exclude-from-search'

这也将更新瞬态缓存数据,并且可以解决这个问题......