Support

Account

Forum Replies Created

  • No problem Keith, thank you very much for looking into that. Unfortunately this solution doesn’t seem to have worked – it hasn’t changed the sorting of the posts at all, so the problem must be elsewhere.

    Again, I do appreciate your help! 🙂

  • Hi Keith, I’m getting ‘Parse error: syntax error’ for the curly bracket at the end of this line:

    if ( is_post_type_archive( 'my_custom_post_type' ) && !empty( $query->query['post_type'] == 'my_custom_post_type' ) {

    Nothing I have tried seems to fix the issue. Thank you!

  • Hi Keith,

    Thank you for your reply and for helping me out – I really appreciate it

    Unfortunately the syntax within your suggested code is throwing errors for me, and I’m not sure why – do you perhaps have any ideas?

    Thank you!

  • It absolutely does – thank you very much indeed for all your help!

  • Thank you SO much, John – you have been a great help and this seems to be working really well. How then do I apply meta_value_num (so that month ’10’ is greater than month ‘2’ etc?) Adding ‘meta_value_num’ to the orderby array doesn’t seem to work. Here’s what I have now:

    function exhibition_pre_get_posts( $query ) {
    
    	if( is_admin() ) {
    		return $query;
    	}
    	
    	if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'exhibition' ) {
    
    $meta_query = array(
      array(
        'year_clause' => array(
          'key' => 'year',
          'compare' => 'EXISTS'
        )
      ),
      array(
        'month_clause' => array(
          'key' => 'month',
          'compare' => 'EXISTS'
        )
      )
    );
    $query->set('meta_query', $meta_query);
    $query->set('orderby', array('year_clause' => 'DESC', 'month_clause' => 'DESC'));
    
    	}
    
    	// return
    	return $query;
    }
    
    add_action('pre_get_posts', 'exhibition_pre_get_posts');
  • Thank you for your reply, John. I did find this post, but couldn’t figure out how to use this in pre_get_posts.

    Here’s what I have tried, but of course it doesn’t work:

    function exhibition_pre_get_posts( $query ) {
    	
    	// do not modify queries in the admin
    	if( is_admin() ) {
    		return $query;
    	}
    	
    	if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'exhibition' ) {
    		$query = new WP_Query( array(
        'meta_query' => array(
            'relation' => 'AND',
            'year' => array(
                'key' => 'year',
            ),
            'month' => array(
                'key' => 'month',
                'compare' => 'EXISTS',
            ), 
        ),
        'orderby' => array(
            'year' => 'DESC',
            'month' => 'DESC',
        ) 
    ) );
    	}
    
    	// return
    	return $query;
    }
    
    add_action('pre_get_posts', 'exhibition_pre_get_posts');

    I’m sure this is a rookie mistake and a misunderstanding of the fundamentals – I’m still very much a beginner, I’m afraid!

Viewing 6 posts - 1 through 6 (of 6 total)