PRE_GET_POST中的另一个查询导致内存问题

时间:2015-03-09 作者:Attila

我正在尝试使用修改分类术语页面上的主查询pre_get_posts 行动和post__in 领域要将ID添加到post\\uu in字段,我必须运行一个查询。调用此查询时,我遇到了“致命错误:允许的内存大小…”问题如果在模板文件中调用相同的查询,效果会很好。我想我应该用一些不同的方法来实现我的目标。如何在内部运行查询pre_get_posts?我只想修改主查询,而不是替换为自定义查询,或创建自定义页面。

function custom_loops($query) {
if (is_tax( \'service_photo_location\' )){
    $ids = get_nearby_partners_by_area(50000, \'service_photo\');
    $query->set( \'post__in\', $ids);
    $query->set( \'posts_per_page\', 10);
    $query->set( \'meta_key\', \'custom_meta_partner_subscription_level\');
    $query->set( \'orderby\', \'meta_value title\');
    $query->set( \'order\', \'ASC\');
}
remove_action( \'pre_get_posts\', \'custom_loops\' );
}
add_action(\'pre_get_posts\', \'custom_loops\');

function get_nearby_partners_by_area($distance, $post_type){
    $post_ids = array();
    $args = array( \'posts_per_page\' => 10, \'post_type\'=> \'wedding_dress\', \'post_status\' => \'publish\', \'fields\' => \'ids\' );
    $all_partners = get_posts( $args ); //at tis point i get memory error
    foreach ( $all_partners as $post ) : setup_postdata( $post );
        // this point I calculate some things
        $post_ids = $post->ID;
    endforeach;
    wp_reset_postdata();
    return $post_ids;
}

1 个回复
最合适的回答,由SO网友:Milo 整理而成

在运行内部查询之前删除该操作,并始终使用验证主查询is_main_query:

function custom_loops($query) {
    if ( $query->is_tax( \'service_photo_location\' ) && $query->is_main_query() ){
        remove_action( \'pre_get_posts\', \'custom_loops\' );
        $ids = get_nearby_partners_by_area(50000, \'service_photo\');
        // ...
    }
}
add_action(\'pre_get_posts\', \'custom_loops\');

结束

相关推荐