woocommerce POS pos只有meta_query不能与显示商店页面一起作为类别

时间:2016-10-31 20:13:23

标签: wordpress woocommerce post-meta

我正在尝试从我的商店中删除有0库存或者0库存的商品 被标记为仅POS,但由于某种原因,只有0库存部分有效。

这是我的代码。我做错了什么?

/****
Functions to remove items from store that have 0 stock
*****/
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {
    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;
    if ( ! is_admin() ) {
        $meta_query = $q->get( 'meta_query' );
        $meta_query[] = array(
            'key'       => '_pos_visibility',
            'value'     => 'pos_only',
            'compare'   => '!='
            );
        $meta_query[] = array(
            'key'       => '_stock_status',
            'value'     => 'outofstock',
            'compare'   => '!='
            );

        $q->set( 'meta_query', $meta_query);
    }
    $q->set('orderby', array('date' => 'DESC'));

    remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

感谢 利奥

2 个答案:

答案 0 :(得分:0)

使用多个relation时,您必须定义meta query。你可以这样写:

$meta_query = array(
    'relation' => 'OR',
     array(   
        'key'       => '_pos_visibility',
        'value'     => 'pos_only',
        'compare'   => '!='
     ),
     array(
        'key'       => '_stock_status',
        'value'     => 'outofstock',
        'compare'   => '!='
     )
);

如果我没弄错的话,meta query将一个数组数组作为参数,可以包含更多带meta queries的数组。现在,您将meta query两个数组作为参数。

希望这有帮助。

答案 1 :(得分:0)

好的,我想出了一些事情。

  1. 使用WooCommerce时,这似乎只是一个问题 - >设置 - >产品 - >显示商店页面显示未设置为产品。即它被设置为类别或类别和产品。
  2. 这是我用来最终解决它的代码。

    add_action( 'woocommerce_product_query', 'hss_shop_query', 10 , 2);
    function hss_shop_query( $q, $that )
    {
    // $q->set( 'author', $vendor_id );
        if ( ! is_admin()  ) {
            $meta_query = $q->get( 'meta_query' );
    
            if (!is_array($meta_query)){
                $meta_query = array();
            }
            $bHasPOSVisibility = false;
            $bHasOutOfStock = false;
    
            foreach ($meta_query as $mq) {
                if ($q->key == '_pos_visibility'){
                    $bHasPOSVisibility = true;
                } else if ($q->key == '_stock_status'){
                    $bHasOutOfStock = true;
                }
            }
    
            if (!$bHasPOSVisibility){
                $meta_query[] = array(
                    'key'       => '_pos_visibility',
                    'value'     => 'pos_only',
                    'compare'   => '!='
                    );
            }
            if (!$bHasOutOfStock){
                $meta_query[] = array(
                    'key'       => '_stock_status',
                    'value'     => 'outofstock',
                    'compare'   => '!='
                    );
            }
            $q->set( 'meta_query', $meta_query);
        }
    
    //error_log("Query: ".var_export($q, true));
    }
    

    我不知道是否需要检查它是否已存在于查询中,但如果他们解决了这个问题,我会将其放入以备将来兼容。