2016-10-31 46 views
0

我試圖從我的商店刪除商品,該商品有0個庫存或 僅標記爲POS,但由於某種原因只有0個庫存部分有效。woocommerce POS pos only 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_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兩個數組作爲參數。

希望這會有所幫助。

+0

關係是默認的AND。而且是我想要的。 – Leo