1

I have a custom Wordpress query which looks like this:

$args = array(
    'post_type' => 'publication',
    'post_status' => 'publish',
    'category_name' => 'my-category',
    'posts_per_page' => 20,
    'orderby' => 'publication_year',
    'order' => 'DESC',
    'paged' => $paged
);
$loop1 = new WP_Query($args);

I am querying a custom post type, wanting only the posts with a certain category. FWIW, I created the post type using PODS. The query works properly with one little exeption - the order clause:

The orderby field refers to a date field named "publication_year" which only shows the year values 2015, 2014, 2013 etc., but in the database contains full dates like "2013-01-18" and similar.

Now, the order which I get with the above query is 2013, 2014, 2015 - although order is DESC, for which I would expect the opposite. If I change it to ASC, I get 2015, 2014, 2013!

I don't understand that - I would expect ascending order to be 2013, 2014, 2015 etc. Where am I wrong?

Johannes
  • 64,305
  • 18
  • 73
  • 130

1 Answers1

1

publication_year is not a column in the wp_posts table. See the WordPress Database Description. If the orderby parameter is not valid, WordPress will fall back to the default sorting which is the post_date column.

If it is a meta value you should use:

$args = array(
    'post_type' => 'publication',
    'post_status' => 'publish',
    'category_name' => 'my-category',
    'posts_per_page' => 20,
    'orderby' => 'meta_value_num',
    'meta_key' => 'publication_year',
    'order' => 'DESC',
    'paged' => $paged
);

See the WordPress codex for more information.

jrswgtr
  • 2,287
  • 8
  • 23
  • 49