我有一个检查当前用户角色的功能,并显示包含与用户角色匹配的某些元键的帖子。这是我的代码:
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?.
我有办法解决这个问题吗?
由于
答案 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