Ordonare sau Orderby în tax_query (Cum se definește ordinea termenilor în WP_Query)

29 iun. 2016, 13:15:31
Vizualizări: 15.6K
Voturi: 0

Î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();

    ?>
0
Toate răspunsurile la întrebare 1
1

Din get_terms documentația:

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',    
]);
29 iun. 2016 13:28:14
Comentarii

Super!! Funcționează perfect, am ratat complet array-ul get_terms. Mulțumesc din nou! :)

tmgale12 tmgale12
29 iun. 2016 14:47:30