wordpress WooCommerce -如何隐藏过时的SKU

y53ybaqx  于 2023-08-03  发布在  WordPress
关注(0)|答案(1)|浏览(146)

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

}

neskvpey

neskvpey1#

要在WooCommerce中隐藏过时的SKU,您可以使用pre_get_posts操作钩子来修改主查询并排除具有特定SKU的产品。

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' );

字符串
在上面的代码中,将$outdated_skus替换为过时SKU的数组。pre_get_posts操作钩子用于修改主查询并排除具有指定SKU的产品。
通过向查询添加meta_query参数,您可以指定密钥_sku(WooCommerce中的SKU Meta密钥),并使用NOT IN比较来排除具有过时SKU的产品。
此方法允许您从搜索查询中排除过时的SKU,而无需遍历数组或将设置单独应用于查询结果。

相关问题