Ordonare sau Orderby în tax_query (Cum se definește ordinea termenilor în WP_Query)
Încerc să aflu cum pot defini ordinea termenilor în WP_QUERY.
Am creat o bază de cunoștințe. Am un CPT numit knowledge-base și o taxonomie numită topics.
Codul meu afișează toți termenii din taxonomie și apoi parcurge 4 articole care au meta key top_four_num, pentru a afișa cele mai importante patru întrebări din acel subiect. Apoi am un loop imbricat care afișează restul articolelor din acel subiect. Acestea sunt ascunse prin JQUERY, utilizatorul apasă pe un link 'show all' pentru a le afișa.
Totul funcționează cum am nevoie, dar nu pot descoperi cum să schimb ordinea termenilor. În prezent, apar în ordine alfabetică.
Am verificat codex-ul și tax_query nu are parametri pentru ordonare. Poate cineva să mă îndrume în direcția corectă pentru a putea controla ordinea în tax_query?
Codul meu este mai jos. Orice ajutor este foarte apreciat!
<?php
/**
* Baza de cunoștințe
*/
//Încarcă header-ul
get_header();
//* Personalizează textul din caseta de căutare
add_filter( 'genesis_search_text', 'sp_search_text' );
function sp_search_text( $text ) {
return esc_attr( 'Puneți-ne o întrebare...' );
}
// Elimină div.wrap din div.site-inner
add_filter( 'genesis_structural_wrap-site-inner', '__return_empty_string' );
//* Adaugă clasă personalizată body
add_filter( 'body_class', 'sp_body_class' );
function sp_body_class( $classes ) {
$classes[] = 'KB';
return $classes;
} ?>
<style>.site-inner {
max-width: none!important;
padding-top: 0;
} </style>
<!-- Banner superior -->
<div style="text-align: center;" class="top-banner">
<h1 style="color: white;">Prezentare bază de cunoștințe</h1>
<?php get_search_form(); ?>
</div>
<!-- clasă body -->
<div class="body-kb">
<?php
// Începe loop-ul principal pentru subiecte
$_terms = get_terms( array('topic') );
foreach ($_terms as $term) :
$ids = get_field('top_four', false, false);
$term_slug = $term->slug;
$_first = new WP_Query( array(
'post_type' => 'knowledge-base',
'order' => 'ASC',
'orderby' => 'meta_value_num',
'meta_key' => 'top_four_num',
'posts_per_page' => -4,
'tax_query' => array(
array(
'taxonomy' => 'topic',
'field' => 'slug',
'terms' => $term_slug,
),
),
));
if( $_first->have_posts() ) :
?> <div class="container1"><?php
// Afișează numele termenului
echo '<div class="term-name"><h2>'. $term->name .'</h2></div>';
echo '<hr id="short-line" align="left" width="100">';
while ( $_first->have_posts() ) : $_first->the_post();
?>
<?php
// Contor loop pentru a adăuga div-uri primelor articole returnate
if( 0 == $_first->current_post ) {
?> <div class="example-left"> <?php
}?>
<?php if( 2 == $_first->current_post ) {
?> </div> <?php
}?>
<?php if( 2 == $_first->current_post ) {
?> <div class="example-right"> <?php
}?>
<?php // afișează informațiile articolului ?>
<div class="answers">
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<p><?php get_post_meta( get_the_ID(), 'url', true ); ?></p>
</div>
<?php
endwhile;?>
<?php // Începe loop-ul secundar pentru conținut ascuns ?>
<?php $term_slug = $term->slug;
$_second = new WP_Query( array(
'post_type' => 'knowledge-base',
'order' => 'ASC',
'posts_per_page' => 10, //important pentru avertizarea limită de memorie PHP
'meta_key' => 'priority',
'meta_value' => '1',
'meta_compare' => '>=',
'tax_query' => array(
array(
'taxonomy' => 'topic',
'field' => 'slug',
'terms' => $term_slug,
),
),
));
if( $_second->have_posts() ) :
?>
</div>
<!---Butoane JQUERY pentru afișare/ascundere-->
<div class="view-more"><a class="arrow-link" data-expand="howitworks-expand">Afișează mai multe<img class="main-arrow" src="/wp-content/uploads/arrow@2x-1.png" alt="Săgeată afișare" title="Afișează mai multe"></a></div>
<div class="show-content"><?php
$i = 0;
while ( $_second->have_posts() ) : $_second->the_post();
?>
<?php //Afișează loop-ul ascuns în două coloane automat
if ($i == 0) echo '<div class="one-half first">';
if ($i == (round($_second->post_count / 2))) echo '</div><div class="one-half">';
?> <p class="rest-of-p sub"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<p><?php get_post_meta( get_the_ID(), 'url', true ); ?></p><?php
if ($i == round($_second->post_count)) echo '</div>';
$i++;
?>
<?php endwhile;?>
<?php wp_reset_postdata(); ?>
</div>
<?php endif;?>
<?php //SFÂRȘIT LOOP 2 ?>
<!--oprește container-->
</div>
</div><?php
endif;
endforeach;
?>
</div>
<?php
// Încarcă footer-ul
get_footer();
?>
orderby (string)
: Câmpul/Câmpurile după care se ordonează termenii. Acceptă câmpuri de termeni ('name', 'slug', 'term_group', 'term_id', 'id', 'description'), 'count' pentru numărarea taxonomiei termenului, 'include' pentru a se potrivi cu 'order' din parametrul $include, 'meta_value', 'meta_value_num', valoarea lui $meta_key, cheile array-ului din $meta_query, sau 'none' pentru a omite clauza ORDER BY. Valoarea implicită este 'name'.
Exemplu:
get_terms([
'taxonomy' => 'topic',
'orderby' => 'field',
'order' => 'ASC/DESC',
]);
