J'essaie de comprendre le problème avec ça depuis une heure, mais je me suis heurté à un mur. Fondamentalement, j'essaie simplement d'interroger mon type d'article personnalisé en fonction de certains champs de date personnalisés, puis de les afficher. Quelqu'un a une idée où je vais mal?
<?php
// - query -
global $wpdb;
$yesterday = strtotime("-1 day");
$querystr = "
SELECT *
FROM $wpdb->posts
INNER JOIN {$wpdb->postmeta}postmeta m1
ON ( {$wpdb->posts}posts.ID = m1.post_id )
INNER JOIN {$wpdb->postmeta}postmeta m2
ON ( {$wpdb->posts}posts.ID = m2.post_id )
WHERE $wpdb->posts.post_type = 'tf_events'
AND $wpdb->posts.post_status = 'publish'
AND ( m1.meta_key = 'tf_events_startdate' AND m1.meta_value > $yesterday )
AND ( m2.meta_key = 'tf_events_starttime')
ORDER BY m1.meta_key ASC, m2.meta_key ASC LIMIT 30
";
$events = $wpdb->get_results($querystr, OBJECT);
if ($events):
global $post;
foreach ($events as $post):
setup_postdata($post);
// - variables -
$custom = get_post_custom(get_the_ID());
$sd = $custom["tf_events_startdate"][0];
$ed = $custom["tf_events_enddate"][0];
$st = $custom["tf_events_starttime"][0];
$et = $custom["tf_events_endtime"][0];
$post_image_id = get_post_thumbnail_id(get_the_ID());
if ($post_image_id) {
$thumbnail = wp_get_attachment_image_src( $post_image_id, 'post-thumbnail', false);
if ($thumbnail) (string)$thumbnail = $thumbnail[0];
}
// - output -
?>
<div>Show the goodies</div>
<?php endforeach; ?>
<?php else : ?>
<h2 class="center">Not Found</h2>
<p class="center">Sorry, but you are looking for something that isn't here.</p>
<?php endif; ?>
Merci d'avance :)
Je voudrais vérifier la sortie de $querystr
. Il semble que vous ayez le nom de la table deux fois. $wpdb->postmeta
résout quelque chose comme wp_postmeta
et vous avez à nouveau postmeta
. Cela vous donne wp_postmetapostmeta
qui n'est pas une table valide.
Je vous recommande fortement d’essayer Barre de débogage . Cela simplifie grandement le débogage des requêtes.
Près de cette requête (dunno si vous pouviez choisir plusieurs méta-clés - c’est possible avec orderby):
$tf_events_query = new WP_Query( array(
'post_type' => 'tf_events'
,'posts_per_page' => '30'
// ordered by meta_valu AND date
,'orderby' => 'meta_value date'
// or if the meta key value is numeric ordered by num meta value AND date
// ,'orderby' => 'meta_value_num date'
,'meta_key' => 'tf_events_startdate'
,'order' => 'ASC'
) );
Enfin obtenu, merci pour l'aide les gars ...
<?php
$querystr = "
SELECT *
FROM $wpdb->posts wposts, $wpdb->postmeta metadate, $wpdb->postmeta metatime
WHERE (wposts.ID = metadate.post_id AND wposts.ID = metatime.post_id)
AND (metadate.meta_key = 'tf_events_startdate' AND metadate.meta_value > $yesterday )
AND metatime.meta_key = 'tf_events_starttime'
AND wposts.post_type = 'tf_events'
AND wposts.post_status = 'publish'
ORDER BY metadate.meta_value ASC, metatime.meta_value DESC LIMIT 30
";
?>