wordpress pre_get_posts导致内存问题

时间:2016-05-20 08:40:29

标签: wordpress out-of-memory

我有一个检查当前用户角色的功能,并显示包含与用户角色匹配的某些元键的帖子。这是我的代码:

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?.

我有办法解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:0)

代替首先通过循环获取所有排除的ID,我建议您直接检查元键。喜欢这个

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

如果这没有给出您想要的结果,那么您必须使用$query->set( 'meta_value', '' );进行一些RND