提问人:Rip 提问时间:7/6/2023 更新时间:7/6/2023 访问量:48
WooCommerce – 如何隐藏过时的 SKU
WooCommerce – how to hide outdated skus
问:
我正在寻找一种方法来隐藏 WooCommerce 中过时的 SKU。
以下方法有效。我想知道我是否缺少一种以更少的迭代来实现这一目标的方法。
是否可以按 SKU 数组从搜索中排除产品?
是否可以使这样的语法与 WooCommerce 查询中的 SKU 一起使用? $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 );
通过 PHP 在 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();
这有效,但我想知道是否有可能摆脱其中一个或两个迭代过程:
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赞
Bhautik
7/6/2023
#1
要在 WooCommerce 中隐藏过时的 SKU,您可以使用操作钩子修改主查询并排除具有特定 SKU 的产品。pre_get_posts
function exclude_outdated_skus( $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
// Array of outdated SKUs
$outdated_skus = array( 'SKU1', 'SKU2', 'SKU3' ); // Replace with your outdated SKUs
// Exclude products with outdated SKUs
$meta_query = $query->get( 'meta_query' );
$meta_query[] = array(
'key' => '_sku',
'value' => $outdated_skus,
'compare' => 'NOT IN',
);
$query->set( 'meta_query', $meta_query );
}
}
add_action( 'pre_get_posts', 'exclude_outdated_skus' );
在上面的代码中,替换为过时的 SKU 数组。操作挂钩用于修改主查询并排除具有指定 SKU 的产品。$outdated_skus
pre_get_posts
通过将参数添加到查询中,您可以指定密钥(WooCommerce 中的 SKU 元密钥)并使用比较来排除具有过时 SKU 的产品。meta_query
_sku
NOT IN
此方法允许从搜索查询中排除过时的 SKU,而无需循环访问数组或单独将设置应用于查询结果。
评论
2赞
NotTheDr01ds
7/7/2023
欢迎回到 Stack Overflow。看起来你已经有一段时间没有发帖了,可能不知道当前的政策,因为你最近的 20 个答案中有许多似乎可能全部或部分是由 AI(例如 ChatGPT)编写的。请注意,此处禁止发布 AI 生成的内容。如果您使用 AI 工具来协助回答任何问题,我鼓励您将其删除。谢谢!
1赞
NotTheDr01ds
7/7/2023
读者应该仔细和批判性地审查这个答案,因为人工智能生成的信息通常包含根本性的错误和错误信息。如果您发现质量问题和/或有理由相信此答案是由 AI 生成的,请留下相应的反馈。审核团队可以使用您的帮助来识别质量问题。
评论