過去1時間この問題を解決しようとしていましたが、壁にぶつかっていました。基本的に、私はいくつかのカスタム日付フィールドに基づいて私のカスタム投稿タイプを照会してそれをそれぞれ表示しようとしています。誰が私が間違っているところで考えを持っている?
<?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; ?>
前もって感謝します :)
$querystr
の出力を確認します。テーブル名が2回あるようです。 $wpdb->postmeta
はwp_postmeta
のようなものに解決され、それからあなたは再びpostmeta
を持ちます。これはあなたにwp_postmetapostmeta
を与えますが、これは有効なテーブルではありません。
Debug Bar を試してみることを強くお勧めします。クエリのデバッグが非常に簡単になります。
このクエリに近い(複数のメタキーを選択できる場合はdunno - 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'
) );
最後にそれを手に入れました、助けてくれてありがとう...
<?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
";
?>