隐藏 Woocommerce 档案页面中价格为零或空的产品

问题描述 投票:0回答:3

我正在使用 Woocommerce 设置批发商店,但无法解决以下问题。

我想自动隐藏或删除所有价格设置为零或产品根本没有价格的产品!

我在网上冲浪,发现以下代码应该完全满足我的需要,但我将其放入我的子主题functions.php文件中,但它对我不起作用!

在 WooCommerce 中隐藏价格设置为零的产品

add_action( 'woocommerce_product_query', 'react2wp_hide_products_higher_than_zero' );
function react2wp_hide_products_higher_than_zero( $q ){
   $meta_query = $q->get( 'meta_query' );
   $meta_query[] = array(
      'key'       => '_price',
      'value'     => 0,
      'compare'   => '>'
   );
   $q->set( 'meta_query', $meta_query );
}

在 WooCommerce 中隐藏没有价格的产品

add_action( 'woocommerce_product_query', 'react2wp_hide_products_without_price' );
function react2wp_hide_products_without_price( $q ){
   $meta_query = $q->get( 'meta_query' );
   $meta_query[] = array(
      'key'       => '_price',
      'value'     => '',
      'compare'   => '!='
   );
   $q->set( 'meta_query', $meta_query );
}

来源 - https://react2wp.com/woocommerce-hide-products-without-price-simple-fix/

我正在使用 Woocommerce 3.4.5 和 Flatsome 主题(更改主题也没有帮助)

如何找出代码不起作用的原因?

如有任何帮助,我们将不胜感激。

php wordpress woocommerce product product-price
3个回答
1
投票

更新 - 添加了自动移至垃圾箱零价或空价产品

要将没有价格或零价格的产品从存档页面隐藏为商店,请使用以下命令:

add_filter( 'woocommerce_product_query_meta_query', 'shop_only_instock_products', 10, 2 );
function shop_only_instock_products( $meta_query, $query ) {
    // In frontend only
    if( is_admin() ) return $meta_query;

    $meta_query['relation'] = 'OR';

    $meta_query[] = array(
        'key'     => '_price',
        'value'   => '',
        'type'    => 'numeric',
        'compare' => '!='
    );
    $meta_query[] = array(
        'key'     => '_price',
        'value'   => 0,
        'type'    => 'numeric',
        'compare' => '!='
    );
    return $meta_query;
}

代码位于活动子主题(或活动主题)的 function.php 文件中。已测试并有效。


但是使用像第一个代码片段这样的东西会得到相同的结果(价格大于零)

add_filter( 'woocommerce_product_query_meta_query', 'shop_only_instock_products', 10, 2 );
function shop_only_instock_products( $meta_query, $query ) {
    // In frontend only
    if( is_admin() ) return $meta_query;

    $meta_query[] = array(
        'key'     => '_price',
        'value'   => 0,
        'type'    => 'numeric',
        'compare' => '>'
    );
    return $meta_query;
}

代码位于活动子主题(或活动主题)的 function.php 文件中。已测试并有效。


将产品移至垃圾箱(不删除它们)零价或空价。

以下代码将使用非常简单的直接 SQL 查询将具有

价格的所有产品的状态更新为
trash

您每次需要时只需运行一次。

// Function that will add products to trash that have Zero price or no price
function auto_add_product_to_trash(){
    global $wpdb;

    $number_of_products_processed = $wpdb->query("
        UPDATE {$wpdb->prefix}posts as a
        JOIN {$wpdb->prefix}postmeta AS b ON a.ID = b.post_id
        JOIN {$wpdb->prefix}postmeta AS c ON a.ID = c.post_id
        SET a.post_status = 'trash'
        WHERE a.post_status LIKE 'publish' AND a.post_type LIKE 'product'
        AND b.meta_key LIKE '_price' AND c.meta_key LIKE '_sale_price'
        AND ( b.meta_value LIKE '' OR b.meta_value LIKE '0' )
        AND c.meta_value != '0'
    ");
    
    // Return the number of products added to trash
    return $number_of_products_processed;
}

// Execute the function - Run it just once and comment it
auto_add_product_to_trash();

代码位于活动子主题(或活动主题)的 function.php 文件中。已测试并有效。


现在,当您在后端访问您的产品时,所有价格为零或空的产品都将被放入垃圾箱。您可以一一查看并轻松删除它们:

enter image description here

这样一切都是安全的,因为您可以恢复添加到垃圾箱中的任何产品。如果您恢复产品,则必须将其状态设置为已发布(恢复的产品获得“草稿”状态)


0
投票

正如疯狂的猜测一样: 将您的

react2wp_hide_products_without_price()
更改为
'value'=> ''
,更改为
'value'=> 0,


-1
投票

您可以在管理员上进行。 按价格排序 - 会将所有已定价的项目放在一起,并将那些没有价格的项目放在一起。 批量删除您所在的页面,并通过更改屏幕选项>每页的项目数来操纵您所看到的内容

© www.soinside.com 2019 - 2024. All rights reserved.