have_posts()在wordpress中返回false

时间:2017-08-04 09:25:13

标签: wordpress

我正在尝试在wp的主题上显示最后一篇文章,所以我写了这段代码:

<?php get_header(); ?>

<div class="content">

<div class="pad group">

    <?php get_template_part('inc/page-title'); ?>

    <?php //echo var_dump(have_posts()); ?>

    <?php if ( have_posts() ) : ?>

        <?php if ( ot_get_option('blog-standard') == 'on' ): ?>

            <?php while ( have_posts() ): the_post(); ?>
                <?php get_template_part('content-standard'); ?>
            <?php endwhile; ?>

        <?php else: ?>
            <div class="post-list group">
                <?php $i = 1; echo '<div class="post-row">'; while ( have_posts() ): the_post(); ?>
                    <?php get_template_part('content'); ?>
                    <?php if($i % 2 == 0) { echo '</div><div class="post-row">'; } $i++; endwhile; echo '</div>'; ?>
            </div><!--/.post-list-->
        <?php endif; ?>

        <?php get_template_part('inc/front-widgets-bottom'); ?>
        <?php get_template_part('inc/pagination'); ?>
        <?php get_template_part('inc/picks'); ?>

    <?php endif; ?>

    <?php get_template_part('inc/front-widgets-top'); ?>

</div><!--/.pad-->

在第一部分中我得到标题,在content div中我打开了一个名为pad group的容器,然后使用page-title我得到了页面的标题。

在此之后,我检查是否有可用的帖子(当然有)if ( have_posts() ),但条件中的代码永远不会执行,事实上,如果你看到var_dump have_posts() 1}}并返回false

我在这里看到了同样主题的其他问题,但我找不到任何解决方案。其中一些问题询问if条件未正确关闭,但我检查了所有包含的文件(header也是如此),我找不到任何问题。

有人可能比我有更好的眼睛?谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

尝试使用自定义WP_Query。

// WP_Query arguments
$args = array(
    'posts_per_page'         => '1',
    'cat' => <CATEGORY_ID>
);

// The Query
$query = new WP_Query( $args );

// The Loop
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // do something
    }
} else {
    // no posts found
}

// Restore original Post Data
wp_reset_postdata();

上面的代码会从您通过 CATEGORY_ID 设置的类别中提取一条最近的帖子。

如果您想进一步自定义查询,可以使用WP_Query generator,或选中WP_Query Class docs

答案 1 :(得分:0)

试试这个 -

$args = array(
    'post_type' => 'post',//or you can add custom post type
    'order' => 'DESC'
);
$posts = get_posts($args);
if(!empty($posts)){
    foreach($posts as $post => $post_val){
        echo $post_val->post_content;
    }
}