Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I am creating a Dentist directory site, and I have a taxonomy archive page which requires particular grouping and sorting (see below). So far I have only been able to achieve this using 3 WP_Querys and 3 loops. This does work fine, except of course WP pagination is broken.

What I'd really like to figure out is if there is anyway that these 3 queries could be re-written as one query so that pagination in WP works as normal. I wonder if some how a single wp_query (and perhaps use WP filters too: http://codex.wordpress.org/Class_Reference/WP_Query#Filters) could achieve the same results in a single wp_query object?

I will try to illustrate the sorting and grouping:

first display:

  • taxonomy 'class' == 'premium'
  • meta_value 'listing_gallery_active' == true
  • order by meta_value 'weighting', then RAND

then display:

  • taxonomy 'class' == 'premium'
  • meta_value 'listing_gallery_active' == false
  • order by meta_value 'weighting', then RAND

then display:

  • taxonomy 'class' NOT IN 'premium'
  • order by meta_value 'weighting', then RAND

Thanks in advance for your kind assistance.

Query 1:

    $premium_gallery_listings_args = array(

            'tax_query' => array(

                array(
                    'taxonomy' => $taxonomy_archive_query_obj -> taxonomy,
                    'field' => 'slug',
                    'terms' => $taxonomy_archive_query_obj -> slug
                ),
                // show premium only
                array(
                    'taxonomy' => 'class',
                    'field' => 'slug',
                    'terms' => 'premium'
                )
            ),
            'meta_query' => array( array(

                    'key' => 'listing_gallery_active',
                    'value' => '1',
                    'compare' => '=='
                )),
            'post_type' => 'dentist',
            'posts_per_page' => $max_results_per_page,
            'paged' => get_query_var('paged'),

            'orderby' => 'meta_value_num RAND',
            'order' => 'DESC',
            'meta_key' => 'weighting',
            'meta_value_num' => '0',

            'meta_compare' => '>'
        );

Query 2:

            // premium listings w/o gallery
    $premium_listings_args = array(

        'tax_query' => array(

            array(
                'taxonomy' => $taxonomy_archive_query_obj -> taxonomy,
                'field' => 'slug',
                'terms' => $taxonomy_archive_query_obj -> slug
            ),
            // show premium only
            array(
                'taxonomy' => 'class',
                'field' => 'slug',
                'terms' => 'premium'
            )
        ),
        'meta_query' => array( array(

                'key' => 'listing_gallery_active',
                'value' => '1',
                'compare' => '!='
            )),
        'post_type' => 'dentist',
        'posts_per_page' => $max_results_per_page,

        'paged' => get_query_var('paged'),

        'orderby' => 'meta_value_num RAND',
        'order' => 'DESC',
        'meta_key' => 'weighting',
        'meta_value_num' => '0',

        'meta_compare' => '>'
    );

Query 3:

        // standard listings
        $standard_listings_args = array(

            'tax_query' => array(

                array(
                    'taxonomy' => $taxonomy_archive_query_obj -> taxonomy,
                    'field' => 'slug',
                    'terms' => $taxonomy_archive_query_obj -> slug
                ),
                // exclude premium listings
                array(
                    'taxonomy' => 'class',
                    'field' => 'slug',
                    'terms' => 'premium',
                    'operator' => 'NOT IN'
                )
            ),
            'post_type' => 'dentist',
            'paged' => get_query_var('paged'),
            'posts_per_page' => $max_results_per_page,
            'orderby' => 'rand'
        );
share|improve this question

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.