Cum să exclud postări personalizate bazate pe dată, sortând după un câmp personalizat
Am un tip de postare personalizată numit "performance". Am o interogare personalizată care sortează postările după valoarea unui câmp personalizat (order-date). Acum vreau să exclud postările care au datele order-date în trecut. M-aș gândi că pot folosi aceeași valoare "order-date" pentru a o compara cu data curentă pentru a determina dacă o postare ar trebui afișată, dar nu găsesc un exemplu care să funcționeze cu sortarea. Orice am încercat strică ordonarea.
Aceasta pare să funcționeze!
<?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',
'meta-value' => $value,
'value' => $today,
'compare' => '>=',
'type' => 'CHAR'
)
)
));
if (have_posts()) :
while (have_posts()) : the_post();
?>
Observați că am definit "$today" și l-am adăugat în meta_array pentru comparație cu meta-value. Postările de performance cu date trecute au dispărut din listă și totul arată cum ar trebui. Mulțumesc lui Brady pentru că m-a îndreptat în direcția corectă.

Trebuie să utilizezi 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', // Tipul postării
'posts_per_page' => 5, // Numărul de postări pe pagină
'caller_get_posts' => 5, // Numărul de postări de obținut
'paged' => $paged, // Pagina curentă
'meta_key' => 'order-date', // Cheia meta pentru sortare
'orderby' => 'meta_value', // Sortare după valoare meta
'order' => 'ASC', // Ordine crescătoare
'meta_query' => array( // Interogare meta
array(
'key' => 'order-date', // Cheia meta
'value' => $value, // Valoarea de comparat
'compare' => '>=', // Operator de comparare
'type' => 'CHAR' // Tipul de date
)
)
));
if (have_posts()) :
while (have_posts()) : the_post();
?>

Brady - Mulțumesc, dar nu sunt sigur cum să implementez asta. Primesc o eroare.

Iată codul pe care l-am implementat: <?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(); ?>

în primul rând, ce eroare primești. în al doilea rând, te rog să actualizezi întrebarea ta cu codul pe care încerci să-l folosești. în al treilea rând, cum stochezi data, în ce format?

<?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(); ?>

Codul este mai sus. Nu reușesc să îl afișez corect în caseta de comentarii (folosind 4 spații). Valoarea câmpului personalizat este în format Y-m-d. În loc de un mesaj de eroare, afișează postări de blog în loc de postări personalizate.

Nu posta cod în caseta de comentarii, nu va funcționa. În schimb, editează întrebarea ta originală și adaugă-l acolo. În al doilea rând, codul pe care ți l-am dat era pentru a-l adăuga la ceea ce ai deja, nu pentru a-l înlocui. În al treilea rând, pentru că folosești formatul Y-m-d, va trebui să setezi tipul de interogare la CHAR și nu la DATE, așa cum ți-am dat inițial.

Mulțumesc, Brady. Codul de mai sus nu strică nimic, nu interferează cu sortarea mea și afișează postările personalizate. Dar nu filtrează evenimentele trecute: încă afișează toate postările personalizate de tip performance.
