我正在寻找一种方法来隐藏过时的SKU在WooCommerce。
下面的方法起作用。我想知道我是否错过了一种用更少的迭代来完成这一任务的方法。
是否可以通过一组SKU从搜索中排除产品?
像这样的语法可以在WooCommerce查询中与skus一起使用吗?$query = new WP_Query(array('cat' => '-12,-34,-56'));
是否可以在不遍历数组的情况下将设置应用于查询结果?
另外,我还看到了两种推荐用于隐藏产品的语法。其中哪一个在将来最不可能被弃用?
$terms = array( 'exclude-from-search', 'exclude-from-catalog' ); // for hidden..
wp_set_post_terms( $prod_ID, $terms, 'product_visibility', false );
字符串
Change product visibility via PHP on Woocommerce 3+
或者这个语法:
// Get an instance of the product variation from a defined ID
$child_product = wc_get_product(child_id);
// Change the product visibility
$child_product->set_catalog_visibility('visible');
// Save and sync the product visibility
$child_product->save();
型
Update the product visibility in Woocommerce 3的
这是可行的,但我想知道是否有可能摆脱其中一个或两个迭代过程:
function test_hide_outdated_skus(){
$product_ids_to_keep = array();
$skus_to_keep = array('sku_0','sku_1','sku_2','sku_3','sku_4');
foreach ($skus_to_keep as $p) {
if (wc_get_product_id_by_sku($p)) {
array_push($product_ids_to_keep,wc_get_product_id_by_sku($p));
}
}
$query = new WC_Product_Query(array(
'exclude' => $product_ids_to_keep,
'limit' => -1,
'tax_query' => array( array(
'taxonomy' => 'product_visibility',
'field' => 'slug',
'terms' => array('exclude-from-search', 'exclude-from-catalog' ),
'operator' => 'NOT IN'
) ),
) );
$products = $query->get_products();
foreach ($products as $prod) {
$prod->set_catalog_visibility('hidden');
$prod->save();
}
}
型
1条答案
按热度按时间neskvpey1#
要在WooCommerce中隐藏过时的SKU,您可以使用
pre_get_posts
操作钩子来修改主查询并排除具有特定SKU的产品。字符串
在上面的代码中,将
$outdated_skus
替换为过时SKU的数组。pre_get_posts
操作钩子用于修改主查询并排除具有指定SKU的产品。通过向查询添加
meta_query
参数,您可以指定密钥_sku
(WooCommerce中的SKU Meta密钥),并使用NOT IN
比较来排除具有过时SKU的产品。此方法允许您从搜索查询中排除过时的SKU,而无需遍历数组或将设置单独应用于查询结果。