2016-10-31 2 views
0

0在庫または のいずれかの店舗からアイテムを削除しようとしていますが、何らかの理由で0在庫部品のみが動作します。woocommerce POSポジションのみmeta_queryがカテゴリーとして店舗ページを表示していません

ここに私のコードです。私は間違って何をしていますか?

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

} 

おかげで レオ

+0

私の解決策がうまくいけば、 – Kevinvhengst

答えて

0

私はいくつか考え出しました。

  1. これは、WooCommerce->設定 - >製品 - >ディスプレイショップページの表示が製品に設定されていない場合にのみ問題があるようです。カテゴリまたはカテゴリおよび製品のいずれかに設定されます。

これは最終的に解決するために使用したコードです。私はそれが既にクエリかに存在するかどうかを確認する必要があるが、彼らはこの問題を修正する場合、私は将来の互換性のためにそれを置く場合、私は知らない

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

0

あなたは、複数のmeta queryを使用しているときrelationを定義する必要があります。私は間違っていない場合はmeta querymeta queriesで複数のアレイを含むことができ、パラメータのような1つのアレイ配列を受け取り、

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

:あなたのような何かを書くことができます。今度は、meta queryに2つの配列をパラメータとして渡します。

これが役に立ちます。

+0

の関係は、デフォルトではANDです。そして、私が欲しいものです。 – Leo

関連する問題