最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Custom order of Taxonomy Terms

programmeradmin0浏览0评论

I'm querying a custom post type and displaying all posts by terms (basically posts by category) as follows, everything is working fine EXCEPT for some reason no matter how I write the tax_query array, I can't seem to get the order of the terms to change (ASC and DESC don't change anything).

Can anyone see where I might have gone wrong here?


$temp_query = $wp_query;

$custom_terms = get_terms('instruction_categories');

foreach($custom_terms as $custom_term) {
    wp_reset_query();
    $args = array(
        'post_type' => 'instruction-sheets',
        'orderby' => 'name', // order of the products
        'order'  => 'ASC',
        'hide_empty' => 1,
        'tax_query' => array(
            array(
                'taxonomy' => 'instruction_categories',
                'field' => 'slug',
                'terms' => $custom_term->slug,
                'hide_empty' => 1,
                'orderby' => $custom_term->name,
                'order' => 'ASC', // switching to DESC should reverse order, but doesnt
            ),
        ),
     );

     $loop = new WP_Query($args);
     if($loop->have_posts()) {
        echo 'Region '.$custom_term->name.'';

        while($loop->have_posts()) : $loop->the_post();

I'm querying a custom post type and displaying all posts by terms (basically posts by category) as follows, everything is working fine EXCEPT for some reason no matter how I write the tax_query array, I can't seem to get the order of the terms to change (ASC and DESC don't change anything).

Can anyone see where I might have gone wrong here?


$temp_query = $wp_query;

$custom_terms = get_terms('instruction_categories');

foreach($custom_terms as $custom_term) {
    wp_reset_query();
    $args = array(
        'post_type' => 'instruction-sheets',
        'orderby' => 'name', // order of the products
        'order'  => 'ASC',
        'hide_empty' => 1,
        'tax_query' => array(
            array(
                'taxonomy' => 'instruction_categories',
                'field' => 'slug',
                'terms' => $custom_term->slug,
                'hide_empty' => 1,
                'orderby' => $custom_term->name,
                'order' => 'ASC', // switching to DESC should reverse order, but doesnt
            ),
        ),
     );

     $loop = new WP_Query($args);
     if($loop->have_posts()) {
        echo 'Region '.$custom_term->name.'';

        while($loop->have_posts()) : $loop->the_post();

Share Improve this question asked Apr 3, 2019 at 19:17 TheSurferTheSurfer 111 silver badge2 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 1

For anyone having the same issue, here's how I ended up solving this. I installed the WP Term Order plugin and then used the following code, the magic happens in the 'orderby' => 'order' line where the 'order' is being pulled from the drag and drop menu order functionality in the admin added by the plugin.


$custom_terms = get_terms('instruction_categories');

foreach($custom_terms as $custom_term) {
wp_reset_query();

$args = array(
    'post_type' => 'instruction-sheets',
    'orderby' => 'meta_value',
    'order'  => 'ASC',
    'hide_empty' => 1,
    'meta_key' => $custome_term->slug,
    'tax_query' => array(
        array(
            'taxonomy' => 'instruction_categories',
            'field' => 'slug',
            'terms' => $custom_term->slug,
            'hide_empty' => 1,
            'orderby' => 'order',
            //  'order' => 'DESC',
        ),
    ),
 );


 $loop = new WP_Query($args);
 if($loop->have_posts()) {

 while($loop->have_posts()) : $loop->the_post();

Then enter whatever code you need to show for parts of your post content, and then don't forget to close the whole thing out with:


    endwhile; 
    }
}

I believe your query arguments need revision. The value for orderby should be meta_value or meta_value_num for a numeric sort.

You also need a meta_key set in your arguments array and in your case that should be set to the value of $custom_term->slug.

Untested arguments for your query:

$args = array(
    'post_type' => 'instruction-sheets',
    'orderby' => 'meta_value', // Change #1
    'order'  => 'ASC',
    'hide_empty' => 1,
    'meta_key' => $custome_term->slug,
    'tax_query' => array(
        array(
            'taxonomy' => 'instruction_categories',
            'field' => 'slug',
            'terms' => $custom_term->slug,
            'hide_empty' => 1,
        ),
    ),
 );

WP Codex reference for sorting: https://codex.wordpress/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论