使用WP_QUERY使用时间戳的元查询

时间:2012-05-18 作者:BraMKJ

我正在为当地的一个滚轴德比联赛开发一个事件系统,但它有一个问题。我制作了一个自定义的帖子类型(“event”),用户可以在其中添加一些不同类型的事件(分类法:“event type”,术语:“about”,“*fresh\\u meat\\u day*”和“*public\\u event*”)。用户还可以输入标题、描述、位置和日期,我使用自定义字段(而不是正常的发布日期)。

我在指定的事件页面(events.php)上显示这些事件,并希望在登录页上显示每个类别的第一个即将到来的事件。我对事件页面没有问题。它显示了一个很好的表格,显示了按日期排序的每个即将到来的事件(ASC)。我的问题是登录页上事件的顺序。

我正在使用此代码在登录页上显示事件:

<?php 
$post_type = \'event\';   
$tax = \'event-type\';
$todaysDate = date(\'d.M.y\');
$todaysString = strtotime($todaysDate);

$tax_terms = get_terms($tax, array(\'orderby\' => \'id\', \'order\' => \'ASC\'));
    if ($tax_terms) {
        foreach ($tax_terms as $tax_term) {

            $args = array(
                \'post_type\' => $post_type,
                "$tax" => $tax_term->slug,
                \'post_status\' => \'publish\',
                \'posts_per_page\' => 1,
                \'meta_key\' => \'event_date\',
                \'meta_compare\' => \'=\',
                \'meta_value\' => $todaysString,
                \'orderby\' => \'meta_value\',
                \'order\' => \'ASC\',
                \'caller_get_posts\' => 1
            ); // END $args

            $my_query = null;
            $my_query = new WP_Query($args);
            if ($my_query->have_posts()) { ;?>
                <ul>
                <?php while ($my_query->have_posts()) : $my_query->the_post();
                ?>
                    <li>
                        <div class="togglebox_140">
                            <img src="<?php bloginfo("template_directory"); ?>/images/events_freshmeat.png" />
                            <div class="togglebox_140_content">
                                <div class="togglebox_140_background">&nbsp;</div>
                                <div class="togglebox_text">
                                    <?php echo \'<p class="togglebox_caption">Next \'.$tax_term->name.\'</p>\';?>
                                    <p class="togglebox_text_type"><?php the_title(); ?></p>
                                </div>
                            </div> 
                        </div>
                    </li>
            <?php
                endwhile;
            } // END if have_posts loop?>
                </ul>
            <?php wp_reset_query();
        } // END foreach $tax_terms
    } // END if $tax_terms
?>
我完全没有从这段代码中得到任何输出,除非我删除它所说的行

\'meta_vale\' => $todaysString;
如果删除该行,我会看到3个即将到来的事件,它会显示事件名称,但顺序不正确(显示的事件不一定是第一个即将到来的事件,而是我添加的第一个事件)。

我完全被困在这一点上,我真的需要以正确的方式安排活动。任何帮助都将不胜感激。

干杯

1 个回复
SO网友:Stephen Harris

正如Kaiser所指出的meta_value => $todaysString 正在查询event_date 等于todays字符串。一、 e.今天发生的事件。

还有,从你使用strtotime 建议您按时间戳排序—您希望将时间戳解释为(并排序为)数字,而不是字符串。因此,而不是订购meta_vaue, 您想按以下方式订购meta_value_num. 尝试:

        $args = array(
            \'post_type\' => $post_type,
            "$tax" => $tax_term->slug,
            \'post_status\' => \'publish\',
            \'posts_per_page\' => 1,
            \'meta_key\' => \'event_date\',
            \'orderby\' => \'meta_value_num\',
            \'order\' => \'ASC\',
        ); // END $args

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post