如果WordPress中的第一篇帖子为空,如何获取最新帖子值

时间:2015-03-02 作者:Danish

我正在处理wordpress自定义字段。我面临获取自定义字段值的问题,如果最新帖子自定义字段值为空,则显示第二个最新帖子或其他帖子自定义字段值。我的自定义字段是视频,如果最新帖子没有视频,则显示2个最新帖子视频值。我不知道如何获取最新的post自定义字段值。

这是我的代码:-

<?php 

                $page_num = $paged;
                if ($pagenum=\'\') $pagenum =1;
              while (have_posts()) : the_post(); 
                $args = array(
                    \'posts_per_page\'      => 1,
                    \'paged\' => $page_num,
                    \'order\' => \'DESC\',
                    \'orderby\' => \'post_date\',
                    \'offset\'=> 0,
                    \'meta_query\'  => array(
                        array(
                            \'key\' => \'video\'
                        )
                    )

                 );
                $loop = new WP_Query( $args );
                while ( $loop->have_posts() ) : $loop->the_post(); 
                $specials = get_post_meta( $post->ID,\'video\'); 
                foreach( $specials as $special): setup_postdata($special);

                echo \'<iframe width="699" height="269" src="http://www.youtube.com/embed/\'.$special.\'?controls=1&showinfo=0&rel=0" allowfullscreen></iframe>\';

                     endforeach;
                endwhile; 
                wp_reset_query();
             ?>
请告诉我任何解决方案。

1 个回复
最合适的回答,由SO网友:David Gard 整理而成

您的尝试并不遥远(+1表示尝试,关键是发布您尝试过的内容),您所要做的只是添加一个EXISTS 到您的元查询。

这个meta_query 参数可能有点像野兽一样让人头痛,为了以防万一,我建议您阅读Class Reference for WP_Query, 专门针对Custom Field Parameters.

$args = array(
    \'posts_per_page\'    => 1,
    \'paged\'             => (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1,
    \'order\'             => \'DESC\',
    \'orderby\'           => \'post_date\',
    \'meta_query\'        => array(
        \'relation\'      => \'AND\',
        array(
            \'key\'       => \'video\',
            \'compare\'   => \'EXISTS\'
        ),
        array(
            \'key\'       => \'video\',
            \'value\'     => \'\',
            \'compare\'   => \'!=\'
        )
    )

);
$loop = new WP_Query($args);

if($loop->have_posts()) : while($loop->have_posts()) : $loop->the_post();

        $specials = get_post_meta($post->ID, \'video\'); 

        foreach($specials as $special): setup_postdata($special);

            echo \'<iframe width="699" height="269" src="http://www.youtube.com/embed/\'.$special.\'?controls=1&showinfo=0&rel=0" allowfullscreen></iframe>\';

        endforeach;

    endwhile;
    wp_reset_postdata();
endif;
<小时>

Additional

作为额外的冗余,我还添加了一个检查,以确保video 自定义字段实际上包含一个值。虽然我相信WP post edit屏幕实际上不允许您保存空的自定义值,但我不能确定您是否正在以这种方式更新它,因此我认为最好将其包括在内。

但是,如果不想包含该支票,可以更改meta_query 此的参数-

\'meta_query\'        => array(
    array(
        \'key\'       => \'video\',
        \'compare\'   => \'EXISTS\'
    )
)

结束

相关推荐