Cum să exclud postări personalizate bazate pe dată, sortând după un câmp personalizat

23 iun. 2011, 21:28:13
Vizualizări: 1.48K
Voturi: 0

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ă.

0
Toate răspunsurile la întrebare 1
9

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();
?>
23 iun. 2011 21:47:41
Comentarii

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

Ray Gulick Ray Gulick
23 iun. 2011 23:44:35

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

Ray Gulick Ray Gulick
23 iun. 2011 23:54:14

Nu pot afișa codul corect; îmi pare rău.

Ray Gulick Ray Gulick
24 iun. 2011 01:34:04

î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?

Scott Scott
24 iun. 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 iun. 2011 04:05:31

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.

Ray Gulick Ray Gulick
25 iun. 2011 04:07:28

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.

Scott Scott
25 iun. 2011 09:39:07

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.

Ray Gulick Ray Gulick
26 iun. 2011 00:29:49

Brady - Codul pe care mi l-ai dat a fost foarte aproape de soluție și îl accept drept răspuns; a trebuit doar să fac o mică ajustare. Vezi întrebarea originală pentru codul actualizat.

Ray Gulick Ray Gulick
26 iun. 2011 00:50:12
Arată celelalte 4 comentarii