Ho risolto un problema negli ultimi giorni e continuo ad andare in cerchio. Potrei davvero usare un nuovo paio di occhi per aiutarmi a rispondere a questa domanda ...
Quindi sto lavorando con un sito wordpress in cui i post hanno alcuni campi personalizzati relativi alla query che devo eseguire: "post-scaduto" e "il mio ordinamento". Quando eseguo query_posts voglio che i risultati siano post in cui il "post-scaduto" NON è "sì" (questa parte funziona nel mio codice). Voglio anche i risultati ordinati in base al valore del numero DESC di "il mio ordinamento" (funziona anche) E se c'è un legame con "il mio ordinamento", vorrei un ordinamento secondario per data con i post più recenti primo.
L'ordinamento secondario per data è dove ho problemi.
Ecco il codice che ho in questo momento:
<?php
$args = array(
'paged' => $paged,
'meta_query'=> array(
array(
'key'=>'post-expired',
'value'=> 'yes',
'compare' => '!='
)
),
'meta_key'=>'my-sort-order',
'orderby'=>'meta_value_num',
'order'=>'DESC'
);
$args = array_merge( $args , $wp_query->query );
query_posts( $args );
?>
Utilizzando il codice sopra ottengo correttamente i post non scaduti e vengono ordinati in base al mio ordinamento decrescente (ovvero 100 visualizzati prima del 99, ecc.). Ma se entrambi i post hanno lo stesso valore di ordinamento, sta accadendo un tipo di ordinamento secondario che non riesco a controllare (e non riesco a capire su cosa venga effettivamente ordinato).
La mia prima idea per risolvere questo problema era quella di aggiungere valori a "il mio ordinamento" se volevo impostare un ordinamento specifico per quel post. Ho pensato che se il valore di questo campo fosse lasciato vuoto per il resto dei post, sarebbero semplicemente restituiti nell'ordinamento predefinito per data DESC (dopo i post con un ordinamento impostato). Tuttavia, ciò che è effettivamente accaduto sono stati i post che non avevano un set di valori di ordinamento NON restituiti affatto ...
Successivamente, ho provato ad aggiungere più valori nel campo orderby in questo modo:
('orderby'=>'meta_value_num date')
Ciò ha fatto esplodere completamente entrambi gli ordinamenti che stavo cercando e ha restituito i messaggi in modo inaspettato. Avevo l'impressione che fossero consentiti più valori di ordine, ma per qualche motivo non funziona qui.
A questo punto non sono sicuro di come far funzionare una di queste potenziali soluzioni. Qualcuno sa come posso 1) Ordinare prima i post dal campo "my-sort-order", quindi i post rimanenti senza valore in quel campo vengono restituiti con l'ordinamento data predefinito; oppure 2) Capire come controllare l'ordinamento secondario in modo che tutti i post che hanno un legame con "il mio ordinamento" vengano ordinati per data (prima i più recenti)?