Come escludere post personalizzati in base alla data, mantenendo l'ordinamento per campo personalizzato
Ho un custom post type chiamato "performance". Ho una query personalizzata che ordina i post in base al valore di un campo personalizzato (order-date). Ora vorrei escludere i post che hanno order-date nel passato. Pensavo di poter usare lo stesso valore "order-date" per confrontarlo con la data odierna e determinare se un post dovrebbe essere mostrato, ma non riesco a trovare un esempio che funzioni con l'ordinamento. Tutto ciò che ho provato interrompe l'ordinamento.
Questa soluzione sembra funzionare!
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$today = date('Y-m-d');
query_posts(array(
'post_type' => 'performance',
'posts_per_page' => 5,
'caller_get_posts' => 5,
'paged' => $paged,
'meta_key' => 'order-date',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'order-date', // Chiave del campo personalizzato
'meta-value' => $value, // Valore del meta (non utilizzato in questo caso)
'value' => $today, // Confronto con la data odierna
'compare' => '>=', // Mostra solo date uguali o successive a oggi
'type' => 'CHAR' // Tipo di dato per il confronto
)
)
));
if (have_posts()) :
while (have_posts()) : the_post();
?>
Nota che ho definito "$today" e l'ho aggiunto al meta_array per il confronto con il meta-value. I post con date passate sono scomparsi dalla lista e tutto sembra funzionare correttamente. Ringrazio Brady per avermi indirizzato sulla strada giusta.

È necessario utilizzare meta_query
http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
query_posts(array(
'post_type' => 'performance',
'posts_per_page' => 5,
'caller_get_posts' => 5,
'paged' => $paged,
'meta_key' => 'order-date',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'order-date',
'value' => $value,
'compare' => '>=',
'type' => 'CHAR'
)
)
));
if (have_posts()) :
while (have_posts()) : the_post();
?>

Brady - Grazie, ma non sono sicuro di come implementare questo. Sto ricevendo un errore.

Ecco il codice che ho implementato: <?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $args = array( 'post_type' => 'performance', 'meta_query' => array( array( 'key' => 'order-date', 'value' => $value, 'compare' => '>=' ), array( 'posts_per_page' => 5, 'caller_get_posts' => 5, 'paged' => $paged, 'meta_key' => 'order-date', 'orderby' => 'meta_value', 'order' => 'ASC' ), ) ); $query = new WP_Query( $args ); if (have_posts()) : while (have_posts()) : the_post(); ?>

prima di tutto, quale errore stai ricevendo. in secondo luogo, per favore aggiorna la tua domanda con il codice che stai provando. terzo, come stai memorizzando la tua data, in quale formato?

<?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $args = array( 'meta_query' => array( array( 'key' => 'order-date', 'value' => $value, 'compare' => '>=' ), array( 'post_type' => 'performance', 'posts_per_page' => 5, 'caller_get_posts' => 5, 'paged' => $paged, 'meta_key' => 'order-date', 'orderby' => 'meta_value', 'order' => 'ASC' ) ) ); $query = new WP_Query( $args ); if (have_posts()) : while (have_posts()) : the_post(); ?>

Il codice è sopra. Non riesco a visualizzarlo correttamente nella casella dei commenti (usando 4 spazi). Il valore del campo personalizzato è in formato Y-m-d. Invece di un messaggio di errore, visualizza semplicemente post del blog invece di post personalizzati.

Non pubblicare il codice nella casella dei commenti, non funzionerà. Invece modifica la tua domanda originale e inseriscilo lì. In secondo luogo, il codice che ti ho dato era da aggiungere a quello che già avevi, non da sostituirlo. Terzo, poiché stai utilizzando il formato Y-m-d, dovrai impostare il tipo di query su CHAR e non su DATE come ti avevo originariamente indicato.

Grazie, Brady. Il codice sopra non rompe nulla, non disturba il mio ordinamento e mostra i post personalizzati. Ma non filtra gli eventi passati: elenca ancora tutti i post personalizzati delle performance.
