order - Sort by an ACF field in a tax_query

admin2025-01-08  5

I do not find the solution which must surely be surely simple. (I'm new to WP) I have an ACF field named "partners_order". I would like to sort it in ascending order (ASC)

here's what i tried

<?php $terms = get_terms('type_partenaires');

usort($terms, function($a, $b) {
    return get_field('ordre_affichage', $a) - get_field('ordre_affichage', $b);
});

foreach ( $terms as $term ): ?>

    <?php echo $term->name; ?>


<?php $loop = new WP_Query( array(
    'post_type' => 'partenaires',
    'orderby'  => 'title',
    'order'    => 'ASC',
    'posts_per_page' => -1,
    'paged' => $paged,
    'tax_query' => array(
        array(
            'taxonomy' => 'type_partenaires',
            'field'    => 'ID',
            'terms'    => $term->term_id,
            'orderby'  => 'partners_order',
            'order'    => 'ASC',
        ),
    ),

) ); ?>

if someone could give me a lead to move forward ... thank you

I do not find the solution which must surely be surely simple. (I'm new to WP) I have an ACF field named "partners_order". I would like to sort it in ascending order (ASC)

here's what i tried

<?php $terms = get_terms('type_partenaires');

usort($terms, function($a, $b) {
    return get_field('ordre_affichage', $a) - get_field('ordre_affichage', $b);
});

foreach ( $terms as $term ): ?>

    <?php echo $term->name; ?>


<?php $loop = new WP_Query( array(
    'post_type' => 'partenaires',
    'orderby'  => 'title',
    'order'    => 'ASC',
    'posts_per_page' => -1,
    'paged' => $paged,
    'tax_query' => array(
        array(
            'taxonomy' => 'type_partenaires',
            'field'    => 'ID',
            'terms'    => $term->term_id,
            'orderby'  => 'partners_order',
            'order'    => 'ASC',
        ),
    ),

) ); ?>

if someone could give me a lead to move forward ... thank you

Share Improve this question asked Dec 31, 2019 at 15:13 PIxel upPIxel up 12 bronze badges
Add a comment  | 

3 Answers 3

Reset to default 0

You have placed orderby in a wrong array. Please check modified code.

$loop = new WP_Query( array(
    'post_type' => 'partenaires',
    'orderby'  => 'title',
    'order'    => 'ASC',
    'posts_per_page' => -1,
    'paged' => $paged,
   'meta_key'=> 'partners_order', 
   'orderby' => 'meta_value_num', 
   'order' => 'ASC', 
    'tax_query' => array(
        array(
            'taxonomy' => 'type_partenaires',
            'field'    => 'ID',
            'terms'    => $term->term_id

        ),
    ),

) ); 

Thank you for your answer, but when I test nothing displays except the type_partenaires.

I think I was wrong on the explanation of my problem. sorry.

I would like to be able to sort by the "partners_order" field. this field is in my while after my $loops

<?php $terms = get_terms('type_partenaires');

                        usort($terms, function($a, $b) {
                            return get_field('ordre_affichage', $a) - get_field('ordre_affichage', $b);
                        });


                        foreach ( $terms as $term ): ?>

                            <div class="cell small-12 medium-12 large-12">
                                <h2 class="title-type-partenaire"><?php echo $term->name; ?></h2> 
                            </div>  

                            <?php 

                                $loop = new WP_Query( array(
                                'post_type' => 'partenaires',
                                'orderby'  => 'title',
                                'order'    => 'ASC',
                                'posts_per_page' => -1,
                                'paged' => $paged,
                                'tax_query' => array(
                                    array(
                                        'taxonomy' => 'type_partenaires',
                                        'field'    => 'ID',
                                        'terms'    => $term->term_id,

                                    ),
                                ),


                                ) ); ?>

                        <div class="cell large-12">
                            <ul class="flex-partenaire">
                            <?php if (have_posts()) : while ( $loop->have_posts() ) : $loop->the_post(); ?>

                                <?php get_template_part( 'template-parts/loop', 'page-partenaires' ); ?>

                            <?php endwhile; ?>
                            </ul>   
                        </div>

'tax_query' is a condition to filter the posts; if you will get ordered terms for a post in the loop, maybe use 'wp_get_post_terms' is correct; ex:

$loop = new WP_Query( array(
    'post_type' => 'partenaires',
    'orderby'  => 'title',
    'order'    => 'ASC',
    'posts_per_page' => -1,
    'paged' => $paged));

if ( $loop->have_posts() ):
  while ($loop->have_posts()) :
    $loop->the_post();
      $terms = wp_get_object_terms( get_the_ID(), 'type_partenaires', array(
        'orderby' => 'meta_value',
        'meta_key' => 'partners_order'
      ));
      array_map(function($term) {
        var_dump($term->name);
      }, $terms);    
  endwhile;
endif;

the field 'partners_order' is meta of terms.

if not, use 'meta_key' in the main loop.

转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1736266107a1094.html

最新回复(0)