WooCommerce – 如何隐藏过时的 SKU

WooCommerce – how to hide outdated skus

提问人:Rip 提问时间:7/6/2023 更新时间:7/6/2023 访问量:48

问:

我正在寻找一种方法来隐藏 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();

更新 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();
        } 

} 
MySQL WordPress的 WooCommerce

评论


答:

-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_skuspre_get_posts

通过将参数添加到查询中,您可以指定密钥(WooCommerce 中的 SKU 元密钥)并使用比较来排除具有过时 SKU 的产品。meta_query_skuNOT IN

此方法允许从搜索查询中排除过时的 SKU,而无需循环访问数组或单独将设置应用于查询结果。

评论

2赞 NotTheDr01ds 7/7/2023
欢迎回到 Stack Overflow。看起来你已经有一段时间没有发帖了,可能不知道当前的政策,因为你最近的 20 个答案中有许多似乎可能全部或部分是由 AI(例如 ChatGPT)编写的。请注意,此处禁止发布 AI 生成的内容。如果您使用 AI 工具来协助回答任何问题,我鼓励您将其删除。谢谢!
1赞 NotTheDr01ds 7/7/2023
读者应该仔细和批判性地审查这个答案,因为人工智能生成的信息通常包含根本性的错误和错误信息。如果您发现质量问题和/或有理由相信此答案是由 AI 生成的,请留下相应的反馈。审核团队可以使用您的帮助来识别质量问题。