我正在使用几个带有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' );
答案 0 :(得分:2)
自Woocommerce 3以来,产品可见性现在由术语'product_visibility'
和'exclude-from-catalog'
的{{1}}自定义分类法处理......请参阅this thread或this one。
所以你应该用这种方式代替WC_Product
CRUD setter methods set_catalog_visibility()
:
'exclude-from-search'
这也将更新瞬态缓存数据,并且可以解决这个问题......