WP_Query ordinamento per valore numerico dei termini della tassonomia
Ho questa query...
<?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();
?>
Ma i miei custom post-type utilizzano una tassonomia personalizzata con un valore numerico come termine.
La mia domanda è: c'è un modo per ordinare questa query in base al valore del termine?
La tassonomia si chiama 'individual-group'
Qualsiasi aiuto sarebbe enormemente apprezzato, grazie.
Josh
No, non è possibile farlo con le funzionalità predefinite del Core di WordPress. @heathenJesus parla di metadati non di tassonomie. Vedi http://scribu.net/wordpress/sortable-taxonomy-columns.html per una soluzione corretta.
E una spiegazione più approfondita del perché questa funzionalità non è integrata nel Core: Usando wp_query è possibile ordinare per tassonomia?
Ecco la query complessa che ho utilizzato per ordinare numericamente e filtrare la query dei post in base agli slug delle tassonomie.
$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"; // È effettivamente una stringa, quindi * 1 per il valore numerico
$r = $wpdb->get_results($querystr, OBJECT);
Certamente, nel parametro orderby, esiste un'opzione chiamata meta_value_num che dovrebbe fare esattamente quello che stai cercando.
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'
));
... purché meta_value sia effettivamente un numero. Ci sono più di un paio di post qui dove le persone cercano di ordinare numericamente cose che non sono numeri :) @heathenJesus, puoi fornire un codice di esempio. Le risposte che contengono solo link sono sconsigliate.
s_ha_dum
La domanda specificava esplicitamente "tassonomia personalizzata con un valore di termine numerico."
Aggiunta una dimostrazione dell'uso di 'meta_value_num'.
heathenJesus
Oh, lo so. Non era in alcun modo una critica alla tua risposta. È solo che, in generale, non mi fido delle persone quando dicono "numerico". A volte intendono cose come "$100" o "123-04". Colloquialmente sono numeri ma non sono numerici per il software. E lavoro con un ufficio pieno di persone così, quindi ho imparato a specificare molto attentamente.
s_ha_dum
@heathenJesus quindi stai dicendo che posso effettivamente interrogare i termini tassonomici allo stesso modo in cui interrogo i campi personalizzati? Pensavo che le mete key e i termini tassonomici registrati fossero due cose separate... Per esempio, potrei interrogare usando il tuo metodo un termine di categoria tramite 'meta_key'? Non pensavo fosse possibile fare così...
Joshc