Intentando excluir publicaciones personalizadas basadas en fecha, mientras se ordenan por campo personalizado

23 jun 2011, 21:28:13
Vistas: 1.48K
Votos: 0

Tengo un tipo de publicación personalizada llamado "performance". Tengo una consulta personalizada que ordena las publicaciones por el valor de un campo personalizado (order-date). Ahora quiero excluir las publicaciones que tienen order-dates que están en el pasado. Pensé que podría usar el mismo valor "order-date" para compararlo con la fecha actual y determinar si una publicación debe mostrarse, pero no puedo encontrar un ejemplo que funcione con el ordenamiento. Todo lo que he probado rompe el orden.

¡Esto parece funcionar!

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

Nota que definí "$today" y lo agregué al meta_array para compararlo con el meta-valor. Las publicaciones de performance con fechas pasadas desaparecieron de la lista y todo parece funcionar como debería. Gracias a Brady por ponerme en el camino correcto.

0
Todas las respuestas a la pregunta 1
9

Necesitas hacer uso de 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', // Tipo de publicación
 'posts_per_page' => 5, // Publicaciones por página
 'caller_get_posts' => 5, 
 'paged' => $paged, // Paginación
 'meta_key' => 'order-date', // Clave meta
 'orderby' => 'meta_value', // Ordenar por valor meta
 'order' => 'ASC', // Orden ascendente
    'meta_query' => array( // Consulta meta
        array(
            'key' => 'order-date', // Clave
            'value' => $value, // Valor
            'compare' => '>=', // Comparación (mayor o igual que)
            'type' => 'CHAR' // Tipo de dato
        )
    )
 ));
if (have_posts()) : // Si hay publicaciones
while (have_posts()) : the_post(); // Bucle de publicaciones
?>
23 jun 2011 21:47:41
Comentarios

Brady - Gracias, pero no estoy seguro de cómo implementar esto. Me está apareciendo un error.

Ray Gulick Ray Gulick
23 jun 2011 23:44:35

Aquí está el código que implementé: <?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 jun 2011 23:54:14

No puedo hacer que el código se muestre correctamente; lo siento.

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

primero, ¿qué error estás obteniendo? segundo, por favor actualiza tu pregunta con el código que estás intentando. tercero, ¿cómo estás almacenando tu fecha, en qué formato?

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

El código está arriba. No puedo hacer que se muestre correctamente en el cuadro de comentarios (usando 4 espacios). El valor del campo personalizado está en formato Y-m-d. En lugar de un mensaje de error, simplemente muestra publicaciones del blog en lugar de publicaciones personalizadas.

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

No publiques código en el cuadro de comentarios, no funcionará. En su lugar, edita tu pregunta original y colócalo allí. En segundo lugar, el código que te di era para agregar a lo que ya tenías, no para reemplazarlo. En tercer lugar, como estás usando el formato Y-m-d, tendrás que configurar el tipo de consulta como CHAR y no como DATE como te indiqué originalmente.

Scott Scott
25 jun 2011 09:39:07

Gracias, Brady. El código anterior no rompe nada, no afecta mi ordenamiento y muestra las publicaciones personalizadas. Pero no filtra los eventos pasados: todavía muestra todas las publicaciones personalizadas de actuaciones.

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

Brady - El código que me diste estuvo muy cerca, y lo acepto como la respuesta; solo tuve que hacer un ajuste menor. Mira la pregunta original para ver el código actualizado.

Ray Gulick Ray Gulick
26 jun 2011 00:50:12
Mostrar los 4 comentarios restantes