Devo ordinare i post (personalizzati) in base a 2 valori di campo personalizzati ...
nome campo personalizzato 1: is_sponsored
[il valore può essere 1
o 0
]
nome campo personalizzato 2: sfp_date
[ timestamp
aka data corrente del post in secondi]
I post il cui " is_sponsored
" valore è 1 devono essere in primo piano, ordinati per " sfp_date
" in DESC
ordine finale. Tutti gli altri post il cui " is_sponsored
" valore è 0 dovrebbero essere elencati di seguito - anche in ordine decrescente (per " sfp_date
").
Ho qualcosa come:
$sfp_query_args = array(
'tax_query' => array(
array(
'taxonomy' => 'sfp_posts',
'terms' => array( 1, 5, 8 )
)
),
'post_type' => 'sfpposts',
'post_status' => 'publish',
'showposts' => 15,
'paged' => $paged,
'meta_key' => 'sfp_date',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'meta_query' => array(
'key' => 'is_sponsored',
'value' => 2,
'type' => 'NUMERIC',
'compare' => '<='
)
);
$wp_q = new WP_Query( $sfp_query_args );
... ma non funziona. Qualche idea?
Nota dell'editore: si tratta di un piccolo plug-in che dovrebbe mostrare l'aspetto della query, poiché probabilmente non abbiamo alcun set di dati disponibile per testarlo.
<?php
/** Plugin Name: (#67600) Dump Query parts */
function wpse67600_dump_query_parts( $pieces )
{
echo '<pre>'.var_export( $pieces, true ).'</pre>';
return $pieces;
}
add_filter( 'posts_clauses', 'wpse67600_dump_query_parts' );
OP PER FAVORE AGGIUNGI USCITA DEL PLUGIN QUI - usa il link "modifica" .
EDIT di Dameer
OK, dopo aver rintracciato la richiesta e numerose soluzioni alternative, ho escogitato il seguente ...
Se semplifico un po '"$ sfp_query_args" il risultato è vicino a ciò che è richiesto, tuttavia, l'impossibilità di ordinare i post rimane così com'è. Ecco qui:
$sfp_query_args1 = array(
'tax_query' => array( array( 'taxonomy' => 'sfp_post_category', 'terms' => $cat_id_arr ) ),
'post_type' => 'sfpposts',
'post_status' => 'publish',
'showposts' => (int)$per_page,
'paged' => $paged,
'meta_key' => 'is_sponsored',
'orderby' => 'meta_value date'
);
- * orderby accetta due attributi: meta_value e date *
Quindi $ wpdb-> request con gli argomenti sopra nella query appare così:
SELECT SQL_CALC_FOUND_ROWS $wpdb->posts.ID
FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships
ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->postmeta
ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
WHERE 1=1
AND $wpdb->posts.post_type = 'sfpposts'
AND ($wpdb->posts.post_status = 'publish')
AND ($wpdb->postmeta.meta_key = 'is_sponsored' )
GROUP BY $wpdb->posts.ID
ORDER BY $wpdb->postmeta.meta_value, $wpdb->posts.post_date DESC
LIMIT 0, $per_page
E infine, per poter ordinare anche per meta_value, la query dovrebbe essere impostata con una sola differenza minore:
SELECT SQL_CALC_FOUND_ROWS $wpdb->posts.ID
FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships
ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->postmeta
ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
WHERE 1=1
AND $wpdb->posts.post_type = 'sfpposts'
AND ($wpdb->posts.post_status = 'publish')
AND ($wpdb->postmeta.meta_key = 'is_sponsored' )
GROUP BY $wpdb->posts.ID
ORDER BY $wpdb->postmeta.meta_value [!ORDER MISSING!], $wpdb->posts.post_date DESC
LIMIT 0, $per_page
Individua il segnaposto [! ORDER MISSING!]. Immagino che quanto sopra dovrebbe spiegare dove si verifica esattamente il problema.