根据类别和帖子元获取帖子

时间:2013-10-07 作者:Tech

我正在为一个广播网站编写一个直播节目框,以显示谁在广播,谁是下一个。我一直在使用get\\u post函数根据类别(在本例中为一周中的某一天)检索帖子,以及为了显示现在应该直播的节目,该节目是否尚未到达其结束时间(自定义字段)。

然而,它有一个转折点,有时会起作用,并且会在其他地方显示错误的节目标题。你知道我哪里做错了吗?

代码如下,请访问http://livewire1350.com 看到它在起作用。

编辑:我已经根据@CharlesClarkson的评论修改了代码,但仍然存在一个问题。出于调试目的,我将代码设置为按时间升序显示整个帖子列表,但在0:00到9:00之间,它开始从22:30降序到18:00,然后在9:00以升序方式继续,直到17:00(如下所示)。你知道为什么会这样吗?

现场:9:29

0:00

现场:9:29

22:30

现场:9:29

21:00

现场:9:29

19: 30个

现场:9:29

18: 00

现场:9:29

9: 00

现场:9:29

10: 30个

现场:9:29

12: 00

现场:9:29

12: 30个

现场:9:29

14: 00

现场:9:29

15: 30个

现场:9:29

17: 00

<?php
date_default_timezone_set(\'Europe/London\');
$now  = time();
$time = date( \'G:i\');
$day_of_the_week = date( \'w\', $now );
//                                    S   M   T   W   T   F   S
$day_of_the_week_categories = array( 17, 18, 12, 13, 14, 15, 16 );
$day_of_the_week = date( \'w\' );

// The Query
$the_query = new WP_Query( array(
    \'cat\'            => $day_of_the_week_categories[ $day_of_the_week ],
    \'posts_per_page\' => -1,
    \'offset\'         => 0,
    \'orderby\'        => \'meta_value_num\',
    \'order\'          => \'DESC\',
    \'meta_query\'     => array(
        array(
            \'key\'     => \'Start_Time\',
            \'type\'    => \'TIME\',
        )
    )
   )
);
// The Loop
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();?>
<div class="liveshow">
    <div id="livebanner">

    <div id="showwrap">
    <div id="showdetails">
        <div id="onair">
            <h3>LIVE: <?php echo $time ?></h3><p class="showname"><a href="<?php the_permalink() ?>"><?php $short_title = substr(the_title(\'\',\'\',FALSE),0,18);
                                                echo get_post_meta( get_the_ID(), \'Start_Time\', true );

                                             ?></p>
            </div>
<?php
endwhile;
endif;
?>

1 个回复
SO网友:Charles Clarkson

可能的问题:

时区的变化可能介于\'End_Time\'date( \'G:i\' ).date( \'G:i\' ) 和date( \'w\' ).date( \'w\' ) 功能

The time zone problem

如果在\'End_Time\' 自定义值与web服务器的时区不同,您可能需要更改date( \'G:i\' ) 调整时区更改。我不知道使用此电话的所有后果:

date_default_timezone_set(\'Europe/London\');
您可能应该在午夜(服务器时间)附近进行一些测试,以了解date( \'G:i\' )date( \'w\' ) 正在返回并与典型\'End_Time\' 来自帖子的自定义值。

<小时>

The date( \'w\' ) function

您反复检查,但服务器在午夜附近会发生什么?

     if ( date( \'w\' ) == 0 ) {
else if ( date( \'w\' ) == 1 ) {
else if ( date( \'w\' ) == 2 ) {
else if ( date( \'w\' ) == 3 ) {
else if ( date( \'w\' ) == 4 ) {
else if ( date( \'w\' ) == 5 ) {
else if ( date( \'w\' ) == 6 ) {
接近午夜时,日期(“w”)中的值可能会更改。如果是这样的话,有可能$args 未设置或设置为具有错误类别的值。

最好检查一下date( \'w\' ) 只有一次:

$day_of_the_week = date( \'w\' );

     if ( $day_of_the_week == 0 ) {
else if ( $day_of_the_week == 1 ) {
else if ( $day_of_the_week == 2 ) {
else if ( $day_of_the_week == 3 ) {
else if ( $day_of_the_week == 4 ) {
else if ( $day_of_the_week == 5 ) {
else if ( $day_of_the_week == 6 ) {
你真的不需要if else if 东西因为你只是在改变\'cat\' 参数,这应该做同样的事情,而不需要所有的键入。

$time = date( \'G:i\' );
//                                    S   M   T   W   T   F   S
$day_of_the_week_categories = array( 17, 18, 12, 13, 14, 15, 16 );
$day_of_the_week = date( \'w\' );

// The Query
$the_query = new WP_Query( array(
    \'cat\'            => $day_of_the_week_categories[ $day_of_the_week ],
    \'posts_per_page\' => 1,
    \'offset\'         => 0,
    \'orderby\'        => \'meta_value_num\',
    \'order\'          => \'ASC\',
    \'meta_query\'     => array(
        array(
            \'key\'     => \'End_Time\',
            \'value\'   => $time,
            \'compare\' => \'>\',
            \'type\'    => \'TIME\',
        ),
    ),
);
<小时>

Change in the time between calling date( \'G:i\' ) and date( \'w\' )

接近午夜(服务器时间)呼叫date( \'G:i\' ) 可能发生在周二date( \'w\' ) 可能发生在周三。可以通过将上面的代码更改为以下代码来解决此问题:

$now  = time();
$time = date( \'G:i\', $now );
$day_of_the_week = date( \'w\', $now );
PHPdate() 函数从PHP获取时间time() 作用通过对单个调用执行所有时间计算time(), $time$day_of_the_week 应该总是指同一时间和同一天。

<小时>

A meta query logic problem.

如果不直接在网站上工作并测试那里的帖子,这个问题很难诊断。所有日期和时间函数用于计算\'End_Time\' 也用于计算$time$day_of_the_week. 计算时可能会出现类似的午夜问题\'End_Time\'.

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在