0

I am new to coding a WP_QUERY and I tried a few things with it but it doesn't seem to work. Right now (you can see the page here: http://boomerang.mannydesigns.co/artistes/parcourir/musique/ )

I need to reorganize the ordering of these artists by a custom field I added (with ACF) name exclusif which is a selection field with 3 choices.

Is it possible to do so without doing a WP_QUERY & simply adding to the current code (which is the usual post loop)?

    /**
 * Alters queries
 */
add_action( 'pre_get_posts', 'wp_order_artists' );
function wp_order_artists( $query ) {

    // don't run on the backend
    if ( is_admin() )
      return;

    // Only run on post types artists
    if ( is_post_type_archive('artists') && $query->is_main_query() || $post_type == 'artists' ) {

        $query->set( 'orderby', 'meta_value' );
        $query->set( 'meta_key', 'exclusif' );
        $query->set( 'order', 'DESC' );
    }

    return;
}
if ( have_posts() ) : ?>
    <div class="remix_items grid clearfix <?php echo $artists_col; ?>">
        <?php while ( have_posts() ): the_post(); ?>
            <a class="item<?php $i++; echo ($i % $artists_col_num === 0) ? ' last_item' : ''; ?>" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" rel="bookmark">
                <figure class="effect-bubba">
                    <?php if ( has_post_thumbnail() ) {
                         the_post_thumbnail('type_cover');
                        } else {
                            echo '<img src="" alt="'.the_title().'">';
                        } ?>
                        <figcaption>
                            <h2><?php the_title(); ?></h2>
                        </figcaption>
                </figure>
            </a>
        <?php endwhile; ?>
   </div>
5
  • 1
    WHY WHY WHY in this world have you switched from pre_get_posts to query_posts query_posts is the WRONG WAY to run a query. Please search this site, I really do think we have said enough about query_posts Commented Feb 24, 2016 at 19:20
  • 1
    There is just no use is using $wp_query if you are breaking it with query_posts. It is like buying a new car for work, then driving it into a wall , scrapping it, for no apparent reason at all Commented Feb 24, 2016 at 19:23
  • 1
    @PieterGoosen I really wish I could upvote that more than once!
    – Cai
    Commented Feb 24, 2016 at 19:26
  • 1
    You should roll back the edit to your question and ask a new question. Your edit is a different problem and my current answer doesn't make sense in relation to the edit. If you ask a new question I'll happily take a look at it.
    – Cai
    Commented Feb 25, 2016 at 13:55
  • @PieterGoosen whether I use query_posts or pre_get_posts the terms I use inside to order will be very similar and the purpose of my question is the boolean I'm trying to order it by prior my other terms. I actually have CAI's code as well as this one for testing purposes - just need some help with the boolean I'm trying to order it by... Commented Feb 25, 2016 at 19:21

1 Answer 1

1

If you want to change the order of an already existing query, you shouldn't create a new WP_Query object but instead use pre_get_posts to alter the existing query, which prevents multiple queries running unnecessarily.

From the pre_get_posts docs:

This hook is called after the query variable object is created, but before the actual query is run.


This is an example of how to change all queries of a custom post type to order by a custom field. Obviously it will need to be changed to fit your situation but should give you an idea of what to do:

/**
 * Alters queries
 */
add_action( 'pre_get_posts', 'wpse_217090_pre_get_posts' );
function wpse_217090_pre_get_posts( $query ) {

    // don't run on the backend
    if ( is_admin() )
      return;

    // Only run on post types 'your_custom_post_type'
    if ( is_post_type_archive('your_custom_post_type') && $query->is_main_query() || $post_type == 'your_custom_post_type' ) {

        $query->set( 'orderby', 'meta_value' );
        $query->set( 'meta_key', '_your_custom_field' );
        $query->set( 'order', 'ASC' );
    }

    return;
}

For reference you should read up on;

10
  • Thank you thank you!!!! That's exactly what I've been looking for. Commented Feb 10, 2016 at 15:37
  • No problem. Glad to help :)
    – Cai
    Commented Feb 10, 2016 at 15:39
  • Check my answer above to confirm I'm on the right track. I added the code just above my if statement on the taxonomy-artist.php template. Exclusif is the ACF field I want to order the items by. Commented Feb 10, 2016 at 17:02
  • The function itself looks fine but it should go in functions.php not the template file
    – Cai
    Commented Feb 10, 2016 at 17:10
  • Is 'artists' a custom post type or custom taxonomy? You need to edit the line if ( is_post_type_archive... to target the correct queries, so if you want it to affect a taxonomy page you will change it to something like if ( is_tax('artist') )
    – Cai
    Commented Feb 10, 2016 at 17:58

Not the answer you're looking for? Browse other questions tagged or ask your own question.