Ordonarea get_terms după meta termen

22 nov. 2016, 04:55:29
Vizualizări: 32.4K
Voturi: 10

Am o taxonomie personalizată numită prod-cat

Vreau să ordonez rezultatul în șablon după număr, așa că am adăugat un term_meta la taxonomie astfel:

add_action( 'prod-cat_add_form_fields', 'add_feature_group_field', 10, 2 );
function add_feature_group_field($taxonomy) {
    ?>
    <div class="form-field term-order-wrap">
        <label for="term-order">Ordine</label>
        <input type="text" name="wm-cat-prod-order" />
    </div>
    <?php
}

Și apoi:

add_action( 'created_prod-cat', 'save_feature_meta', 10, 2 );
function save_feature_meta( $term_id, $tt_id ){
    if( isset( $_POST['wm-cat-prod-order'] ) && '' !== $_POST['wm-cat-prod-order'] ){
        add_term_meta( $term_id, 'wm-cat-prod-order', $_POST['wm-cat-prod-order'], true );
    }
}

Am term_meta funcțional, se salvează. Apoi în șablon fac următoarele:

$args = array(
    'taxonomy'      =>  'categoria-de-productos',
    'orderby'       =>  'wm-cat-prod-order',
    'order'         =>  'ASC',
    'hide_empty'    =>  false,
    'hierarchical'  =>  false,
    'parent'        =>  0,
);

$terms = get_terms( $args );

Dar nu reușesc să îl ordonez după meta "wm-cat-prod-order". Are cineva vreo sugestie? Mulțumesc

0
Toate răspunsurile la întrebare 4
3
18

Funcția get_terms acceptă un parametru meta_query care apelează WP_Meta_Query, așa cum puteți vedea aici. Pentru a interoga termenii cu metadatele dorite, puteți modifica apelul funcției astfel:

$args = array(
  'taxonomy' => 'categoria-de-productos',
  'orderby' => 'meta_value_num',
  'order' => 'ASC',
  'hide_empty' => false,
  'hierarchical' => false,
  'parent' => 0,
  'meta_query' => [[
    'key' => 'wm-cat-prod-order',
    'type' => 'NUMERIC',
  ]],
);

$terms = get_terms( $args );

Acest cod nu a fost testat și poate necesita adaptări în funcție de situația dumneavoastră. Dar linkurile ar trebui să vă ghideze către soluție.

22 nov. 2016 11:45:33
Comentarii

Acest lucru nu funcționează pe categorii + ACF

vladkras vladkras
30 mai 2017 07:56:49

Ce anume dorești să obții @vladkras?

Fabian Marz Fabian Marz
30 mai 2017 11:34:12

De asemenea, poți nega partea meta_query din argumentele tale prin simpla adăugare a 'meta_key'=>'wm-cat-prod-order' asigurându-te că păstrezi și partea 'orderby' => 'meta_value_num'

Frits Frits
3 dec. 2019 09:43:09
2
$args = array(

    'taxonomy'      => 'MY_TAX', // Taxonomia personalizată
    'meta_key'      => 'ordem', // Cheia meta pentru sortare
    'meta_compare'  => 'NUMERIC', // Comparare numerică
    'orderby'       => 'meta_value_num', // Sortează după valoarea meta numerică
    'order'         => 'ASC', // Ordine crescătoare
    'hide_empty'    => false, // Afișează și termenii goi
);

$the_query = new WP_Term_Query($args); // Interogare pentru termeni de taxonomie

foreach ( $the_query->get_terms() as $term ) // Iterează prin termenii returnați
{
    ...
}
29 aug. 2018 20:12:01
Comentarii

Te rugăm să [editezi] răspunsul tău și să adaugi o explicație: de ce ar putea aceasta soluție rezolva problema?

fuxia fuxia
29 aug. 2018 20:46:48

Această soluție funcționează cu custom post type și este simplă, doar schimbă meta_key la fel ca field_name (reține că acesta este un număr)

User User
3 feb. 2019 11:53:04
0

Am avut și eu probleme cu asta și am creat câmpul meu meta cu ACF. Iată ce am făcut pentru a funcționa (am eliminat câteva proprietăți pentru concizie):

$args = array(
    'taxonomy'      => 'categoria-de-productos',
    'order'         => 'ASC',
    'orderby'       => 'meta_value_num',//Tratează valoarea meta ca numerică
    'meta_key'      => 'wm-cat-prod-order'//Cheia meta
);
$terms_query = new WP_Term_Query( $args );
if( ! empty( $terms_query->terms ) ) {
   foreach( $terms_query->terms as $term ) {
      //Fă ceva, $term este un obiect WP_Term
    }
}

Un lucru pe care îl fac de obicei este să definesc o alternativă, cum ar fi 'meta_value_num term_id' pentru a folosi term_id dacă valorile pentru wm-cat-prod-order sunt toate la fel, dar asta a stricat totul și a produs rezultate neașteptate. A funcționat doar dacă 'meta_value_num' era singura valoare pentru orderby.

14 aug. 2020 00:51:29
0

pentru mine, am creat o taxonomie personalizată și în acea taxonomie personalizată am avut un meta personalizat. Am vrut să am în backend-ul de administrare o coloană și să o fac sortabilă. Pentru a face sortarea să funcționeze pentru un meta personalizat într-o taxonomie personalizată, am făcut asta.

https://pastebin.com/vr2sCKzX

public function pre_get_terms( $query ) {
$meta_query_args = array(
    'relation' => 'AND', // Opțional, implicit este "AND"
    array(
        'key'     => 'order_index',
        'value'   => 0,
        'compare' => '>='
    )
);
$meta_query = new WP_Meta_Query( $meta_query_args );
$query->meta_query = $meta_query;
$query->orderby = 'position_clause';

} Am găsit răspunsul în acest link https://core.trac.wordpress.org/ticket/34996

A trebuit doar să adaptez răspunsul furnizat în comentarii de @eherman24

10 nov. 2017 16:20:34