Domanda

Ok, quindi sto usando il class WPAlchemy per creare pannelli campo di scrittura personalizzati nella pagina di post scrittura, e finora tutto ha grande andato ... Tuttavia, c'è un problema che non riesco a capire. Sto cercando di utilizzare i valori dei campi personalizzati di "date degli eventi" per gli eventi di ordinamento su un modello di pagina personalizzata.

Ho seguito le istruzioni "query basata su campo personalizzato e ordinati per valore" trovato nel codice per cercare di impostare la query personalizzata, ma non sembra funzionare?

Ecco il codice dal modello di pagina personalizzato per il " Eventi " Pagina:

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

E 'come non sta raccogliendo le chiavi dei campi personalizzati ... La classe che sto usando per creare queste scrittura personalizzati Pannelli li memorizza tutti come una matrice, quindi il motivo che ho tentato di accedervi utilizzando: _events_meta[event_date]

Forse questo è il problema, ma non so come risolvere il problema se è ...

Tutte le idee?


Modifica Ecco un immagine in modo da poter vedere come i campi personalizzati sono memorizzati nel database. Speriamo che aiuta a capire il motivo per cui il _events_meta[event_date] terra non funziona nella query?

Schermata di PHPMyAdmin con inserto Domanda per il database di WordPress http://staticloader.com/phpmyadmin.png

È stato utile?

Soluzione

Josh, date un'occhiata a: http://farinspace.com/wpalchemy- METABOX-data-storage-modalità / ...

Sto pensando sarò cambiando il modo WPAlchemy memorizza i valori di default ... rendendo la modalità di default ESTRATTO ...

Altri suggerimenti

Ho anche avuto un blog con campi personalizzati per quanto riguarda eventi. Ecco la domanda che ho usato in combinazione con i query_posts () la funzione:

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");

Si selezionerà tutti i messaggi con un campo personalizzato denominato confrontare EVENT_DATE con la data corrente (per filtrare i vecchi eventi) e ordinare loro da un altro campo personalizzato chiamato event_start_date. Spero che i complessi spettacoli exmaple voi, come si dovrebbe utilizzare la funzione query_posts () in modo corretto.

Una semplice selezione che prova solo per l'esistenza di un aspetto campi personalizzati in questo modo:

query_posts('meta_key=event_date'); 

un semplice ordine da un aspetto campo personalizzato come questo:

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

È possibile vedere molte esempio nel descrizione API dei query_posts () Funzione .

Ciao @Josh :

La vostra query funziona bene. è probabilmente che la variabile $events_metabox non è nel campo di applicazione e causando il codice per semplicemente falliscono (stranamente si corre ancora il piè di pagina, non so il perché.) Per risolvere il problema prima provare a impostare al globale nella parte superiore del tuo template:

global $events_metabox

Se questo non funziona dovrete rintracciare il problema in altro modo dal momento che io non so che cosa il vostro codice sta facendo con $events_metabox.

Debug Utilizzando rimozione incrementale e print_r()

Quando si esegue in un problema come questo inizio portando via pezzi fino a risolvere il problema. Se si sta cercando di vedere se la query funziona o non, utilizzare un print_r() per scaricare i valori avvolti nei tag <pre> modo da poter vedere cosa sta succedendo, cioè:.

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

Inoltre, Uso get_posts() invece di diretto SQL

Detto questo, mi piacerebbe molto consiglia di sostituire la query con una chiamata get_posts(). E 'una best practice in WordPress per utilizzare sempre l'API di WordPress e le sue funzioni di query e non utilizzare SQL diretta a meno che non c'è assolutamente niente da fare. È possibile ottenere molti vantaggi tra cui built-in cache, in alcuni casi, in cui gestire le cose come garantire solo i post pubblicati vengono visualizzati a meno che non gli si dice contrario, ed è meno probabile per rompere se cambiano la struttura del database in futuro.

Ecco la chiamata get_posts() avresti bisogno di sostituire la query SQL hardcoded (con alcuni avvertimenti ):

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

O questo equivalente fa esattamente la stessa cosa:

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

avvertimenti ho detto sono che la query non ha filtrare non pubblicato, correnti d'aria, ecc .; la mia ipotesi è che cosa get_posts() lo fa in realtà più quello che ci si vuole in ogni caso.

Il Codex Documenti per get_posts()

La documentazione per get_posts() è qui:

Ma è interessante la documentazione migliore per gli argomenti get_posts() è sulla pagina query_posts() , che si potrebbe anche probabilmente utilizzare per le vostre esigenze. Io preferisco il controllo maggiore di get_posts() ma YMMV .

In ogni caso, in realtà solo query_posts() chiama get_posts() così gli argomenti realmente sono identici:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top