WP_Query - sortare după valoarea numerică a termenului de taxonomie

20 feb. 2013, 16:37:43
Vizualizări: 14K
Voturi: 3

Am această interogare...

<?php 

    $press = new WP_Query(array(
        'posts_per_page' => -1,
        'post_type'     => 'individual',
        'post_status'   => 'private' 
    ));

    if ($press->have_posts()) : while ($press->have_posts()) : $press->the_post();

?>

Dar tipurile mele de postări personalizate folosesc o taxonomie personalizată cu o valoare numerică a termenului.

Întrebarea mea este: există vreo modalitate de a ordona această interogare după valoarea termenului?

Taxonomia se numește 'individual-group'

Orice ajutor ar fi foarte apreciat. Mulțumesc.

Josh

0
Toate răspunsurile la întrebare 3
1

Nu, nu există nicio modalitate de a face acest lucru cu WP Core implicit. @heathenJesus vorbește despre metadate, nu despre taxonomii. Consultați http://scribu.net/wordpress/sortable-taxonomy-columns.html pentru o soluție adecvată.

Și o explicație mai detaliată despre motivul pentru care această funcționalitate nu este inclusă în Core: Using wp_query is it possible to orderby taxonomy?

1 mar. 2013 00:37:59
Comentarii

Mulțumesc Evan, voi avea grijă să creez meta chei pentru aceasta în viitor dacă voi avea nevoie să ordonez un termen de taxonomie.

Joshc Joshc
1 mar. 2013 11:54:30
0

Iată interogarea complexă pe care am folosit-o pentru a sorta numeric și a filtra interogarea de postări după slug-uri de taxonomie.

$my_post_type = 'some_post_type';
$my_term_slug_to_be_used_for_Ordering = 'some_slug';
$my_term_slug_to_be_used_for_Filtering = 'some_other_slug';

$querystr = "
  SELECT 
   $wpdb->posts.*, $wpdb->term_relationships.object_id, 
   (SELECT wpt.slug
        FROM $wpdb->term_taxonomy wptt 
        INNER JOIN $wpdb->term_relationships wptr ON wptt.term_taxonomy_id = wptr.term_taxonomy_id
        INNER JOIN $wpdb->terms wpt ON wpt.term_id = wptt.term_id
        WHERE 
        wptr.object_id = $wpdb->term_relationships.object_id AND 
        wptt.taxonomy = 'my_term_slug_to_be_used_for_Ordering') AS numeric_column_value

    FROM $wpdb->term_taxonomy INNER JOIN $wpdb->term_relationships ON $wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id
         INNER JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->term_relationships.object_id
         INNER JOIN $wpdb->terms ON $wpdb->terms.term_id = $wpdb->term_taxonomy.term_id
    WHERE 
         $wpdb->terms.slug = '{$my_term_slug_to_be_used_for_Filtering}' AND
         $wpdb->posts.post_type = '$my_post_type' AND $wpdb->posts.post_status = 'publish'

    ORDER BY numeric_column_value * 1 DESC"; // De fapt este un șir de caractere, de aceea * 1 pentru conversie numerică

$r = $wpdb->get_results($querystr, OBJECT);
4 mar. 2014 22:04:12
6

Desigur, în parametrul orderby, există o opțiune numită meta_value_num care ar trebui să facă exact ceea ce căutați.

http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters


$press = new WP_Query(array(
    'posts_per_page' => -1,
    'post_type'      => 'individual',
    'post_status'    => 'private',
    'orderby'        => 'meta_value_num',
    'meta_key'       => 'individual-group'
));
20 feb. 2013 17:02:27
Comentarii

... atâta timp cât meta_value este într-adevăr un număr. Există mai multe postări aici unde oamenii încearcă să sorteze numeric lucruri care nu sunt numere :) @heathenJesus, poți oferi un exemplu de cod. Răspunsurile doar cu linkuri sunt descurajate.

s_ha_dum s_ha_dum
20 feb. 2013 17:44:08

Întrebarea specifica în mod expres "taxonomie personalizată cu o valoare numerică a termenului."

Am adăugat o demonstrație de utilizare a 'meta_value_num'.

heathenJesus heathenJesus
21 feb. 2013 23:03:00

Oh, știu. Nu era în niciun fel o critică la adresa răspunsului tău. Doar că, în general, nu am încredere în oameni când spun "numeric". Uneori înseamnă ceva de genul "$100" sau "123-04". Acestea sunt numere în limbajul curent, dar nu sunt numerice pentru software. Și lucrez cu un birou plin de oameni de genul acesta, așa că am învățat să specific foarte atent.

s_ha_dum s_ha_dum
21 feb. 2013 23:18:51

Corect, @s_ha_dum

heathenJesus heathenJesus
21 feb. 2013 23:22:45

@heathenJesus deci spui că pot interoga termenii de taxonomie la fel cum interoghez câmpurile personalizate? Credeam că metacheile și termenii de taxonomie înregistrați sunt lucruri separate... De exemplu, aș putea interoga folosind metoda ta un termen de categorie prin 'meta_key'? Nu credeam că se poate face asta...

Joshc Joshc
23 feb. 2013 02:32:14

ca în 'orderby' => 'meta_value_num', 'meta_key' => 'category'? Evident, termenul meu de categorie trebuie să fie pur numeric pentru ca funcția orderby să funcționeze, desigur..

Joshc Joshc
23 feb. 2013 02:36:27
Arată celelalte 1 comentarii