Pregunta

Ok, así que estoy usando el clase WPAlchemy para crear paneles campo de escritura personalizados en la página de entrada de escritura, y hasta ahora todo tiene un gran ido ... sin embargo, hay un problema que parece que no puede averiguar. Estoy tratando de utilizar los valores de campo personalizado de "fechas de eventos" para ordenar los eventos en una plantilla de página personalizado.

He seguido las instrucciones "Consulta basada en campo personalizado y clasificados por el valor" encuentra en el códice para tratar de configurar la consulta personalizada, pero no parece estar funcionando?

Este es el código de la plantilla de página personalizada para el " Eventos " página:

<?php
/* 
  Template Name: Events
*/
get_header();
?>
<div id="depthead" class="grid_12">
  <h2>Upcoming Events</h2>
</div><!--/depthead-->
<?php

$querystr = "
  SELECT wposts.* 
  FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
  WHERE wposts.ID = wpostmeta.post_id 
  AND wpostmeta.meta_key = '_events_meta[event_date]' 
  AND wposts.post_type = 'post'

  ORDER BY wpostmeta.meta_value DESC
";
$pageposts = $wpdb->get_results($querystr, OBJECT);

?>
<?php if ($pageposts): global $post; $cnt=0; foreach ($pageposts as $post): $cnt++; setup_postdata($post); ?>
<div id="article-<?php echo get_the_ID(); ?>" class="listingbox grid_3">
  <div class="deptpostimg">
    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><img src="<?php echo $events_metabox->get_the_value('event_thumbnail'); ?>" style="outline:1px solid #000" alt="<?php the_title_attribute(); ?>" /><span class="event-date"><?php $events_metabox->the_value('event_date'); ?></span></a>
  </div><!--/deptpostimg-->
  <h4 class="listing-titles"><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4>
  <div class="excerpt">
    <?php the_excerpt(); ?>
  </div><!--/excerpt-->
</div><!--/article-<?php echo get_the_ID(); ?>-->
<?php if($cnt % 4 == 0) { ?>
<div class="grid_12 rowseparator">
  <hr />
</div><!--/rowseparator-->
<?php } ?>
<?php endforeach; endif; ?>
</div><!--/wrapper-->
<?php get_footer(); ?>

Es como que no es recoger las llaves de campo personalizado ... La clase que estoy usando para crear estos paneles tiendas de escritura personalizado a todos ellos como una matriz, de ahí la razón por la que he intentado acceder a ellos mediante el uso de: _events_meta[event_date]

Tal vez ese es el problema, pero no sé cómo solucionarlo si es ...

¿Alguna idea?


EDIT: Aquí está una imagen para que pueda ver cómo se almacenan los campos personalizados en la base de datos. Esperemos que ayuda a determinar por qué en la tierra _events_meta[event_date] no funcionará en la consulta?

Captura de pantalla de phpMyAdmin con una consulta de inserción de la base de datos de WordPress http://staticloader.com/phpmyadmin.png

¿Fue útil?

Solución

Josh, echar un vistazo a: http://farinspace.com/wpalchemy- METABOX-datos-almacenamiento-modos / ...

Estoy pensando que voy a cambiar la forma en WPAlchemy almacena valores por defecto ... haciendo el modo por defecto EXTRACTO ...

Otros consejos

También tiene un blog con campos personalizados en cuanto evento. Aquí es la consulta que se utiliza en combinación con los query_posts () Función:

query_posts($query_string . "&meta_key=event_date_end&meta_compare=>=&meta_value=".date('Y-m-d')."&meta_key=event_date_start&orderby=meta_value&order=ASC");

Se seleccionará todos los mensajes con un campo personalizado llamado EVENT_DATE compararla con la fecha actual (para filtrar los eventos antiguos) y ordenarlos por otro campo personalizado llamado event_start_date. Espero que los complejos programas de exmaple usted, cómo se debe utilizar los query_posts () funcione correctamente.

Una selección simple que la prueba sólo por la existencia de una apariencia de campos personalizados de la siguiente manera:

query_posts('meta_key=event_date'); 

Una simple orden de un campo personalizado es similar al siguiente:

query_posts('meta_key=event_date&orderby=meta_value&order=ASC');

Se puede ver muchos ejemplos en el Descripción de las API query_posts () la función .

Hola @ Josh

Su consulta funciona bien. Es probablemente que la variable de $events_metabox no está en el alcance y la causa de su código para simplemente fallan (extrañamente todavía funciona el pie de página, ¡no sé qué.) Para solucionarlo en primer lugar tratar entorno que a lo global en la parte superior de su plantilla:

global $events_metabox

Si eso no funciona, tendrá que localizar el problema de otra manera, ya que no sé lo que su código está haciendo con $events_metabox.

Depurar la función de eliminación incremental y print_r()

Cuando se encuentra con un problema como este inicio quitando piezas hasta que arregle el problema. Si usted está tratando de ver si su consulta está funcionando o no, utilizar un print_r() para volcar los valores envueltos en las etiquetas <pre> para que pueda ver lo que está pasando, es decir:.

<?php
$pageposts = $wpdb->get_results($querystr, OBJECT);
echo '<pre>';
print_r($pageposts);
echo '<pre>';

También, el uso get_posts() en lugar de SQL directa

Dicho esto, me muy recomienda reemplazar la consulta con una llamada get_posts(). Es una mejor práctica en WordPress a siempre utilizar la API de WordPress y es funciones de consulta y Nunca utilizar SQL directa a menos que no hay absolutamente ninguna manera de evitarlo. Se obtiene muchos beneficios, incluyendo incorporados en el almacenamiento en caché en algunos casos, en que manejan cosas como asegurar mensajes publicados solamente se muestran a menos que usted le indique lo contrario, y es menos probable que se rompa si cambian la estructura de base de datos en el futuro.

Aquí está la llamada get_posts() que había necesidad de reemplazar la consulta SQL codificado (con algunas advertencias ):

$pageposts = get_posts('meta_key=_events_meta[event_date]&orderby=meta_value&order=ASC');

O esto equivale hace exactamente la misma cosa:

$pageposts = get_posts(array(
  'meta_key' => '_events_meta[event_date]',
  'orderby'  => 'meta_value',
  'order'    => 'ASC',
));

El advertencias he mencionado son que su consulta no filtrar no publicada, borradores, etc .; yo creo que es lo que get_posts() lo hace realmente más lo que se quiere de todos modos.

El Codex Docs para get_posts()

La documentación para get_posts() está aquí:

Pero curiosamente la mejor documentación para los argumentos get_posts() está en la página query_posts() , que también se podría utilizar probablemente para sus necesidades. Yo prefiero el mayor control de get_posts() pero YMMV .

De todos modos, query_posts() realidad sólo llama get_posts() por lo que los argumentos son realmente idénticas:

Licenciado bajo: CC-BY-SA con atribución
scroll top