2016-05-20 24 views
0

私は現在のユーザーの役割をチェックし、ユーザーの役割に一致する特定のメタキーを持つ投稿を表示する機能を持っています。ここに私のコードです:wordpress pre_get_postsメモリの問題を引き起こします

function wwp_exclude_products($query) { 
    $exclude = array(); 
    $hide_products = get_option('wwo_hide_wholesale_prices'); 
    if ($query->is_main_query()) { 
     $featured = get_posts(array(
      'post_type' => 'product', 
      'posts_per_page' => -1 
     )); 

     if($hide_products){ 
      foreach($featured as $hide) { 
       $user_price = get_post_meta($hide->ID, '_'.woo_get_user_role().'_price', true); 
       if($user_price == NULL){ 
        $exclude[] = $hide->ID; 
       } 
      } 
      $query->set('post__not_in', $exclude); 
     } 
    } 
} 

add_filter('pre_get_posts', 'wwp_exclude_products'); 

私はこの機能を使用するいくつかのサイトでメモリエラーを生成します。ここで

は誤りです:

Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) in /www/wp-includes/taxonomy.php on line 2037?. 

は、私はこれを解決することができます方法はありますか?

おかげで最初のループですべて除外のIDを取得する代わりに

+1

でいくつかのRNDをしなければならない-1'代わりに最初の999を取得してみてください。投稿数が多い場合、 ''posts_per_page' => -1'のクエリはすべての投稿を通過する必要があります。そして、すべての投稿(表示または検索)を必要とする人の可能性は小さいです。 –

答えて

0

、私はあなたが直接メタキーをチェックすることをお勧め。これはあなたの望ましい結果を与えなかった場合は、この

function wwp_exclude_products($query) { 
    $hide_products = get_option('wwo_hide_wholesale_prices'); 
    $key = '_'.woo_get_user_role().'_price'; 
    if ( $hide_products && $query->is_main_query()) { 
    $query->set('meta_key', $key); 
    $query->set('meta_value', ''); 
    } 
} 

add_filter('pre_get_posts', 'wwp_exclude_products'); 

と同じように、あなたはその代わりに、すべての記事 `「posts_per_page」=>をフェッチする$query->set('meta_value', '');

関連する問題