Come escludere post personalizzati in base alla data, mantenendo l'ordinamento per campo personalizzato

23 giu 2011, 21:28:13
Visualizzazioni: 1.48K
Voti: 0

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.

0
Tutte le risposte alla domanda 1
9

È 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();
?>
23 giu 2011 21:47:41
Commenti

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

Ray Gulick Ray Gulick
23 giu 2011 23:44:35

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

Ray Gulick Ray Gulick
23 giu 2011 23:54:14

Non riesco a far visualizzare correttamente il codice; scusa.

Ray Gulick Ray Gulick
24 giu 2011 01:34:04

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?

Scott Scott
24 giu 2011 06:17:32

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

Ray Gulick Ray Gulick
25 giu 2011 04:05:31

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.

Ray Gulick Ray Gulick
25 giu 2011 04:07:28

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.

Scott Scott
25 giu 2011 09:39:07

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.

Ray Gulick Ray Gulick
26 giu 2011 00:29:49

Brady - Il codice che mi hai dato era molto vicino, e lo accetto come risposta; ho solo dovuto apportare una piccola modifica. Vedi la domanda originale per il codice aggiornato.

Ray Gulick Ray Gulick
26 giu 2011 00:50:12
Mostra i restanti 4 commenti