Why aren't my posts showing?

时间:2014-08-23 作者:JohnMcCarthy

我正在为我的投资组合网站创建一个主题。经过一段时间的反复试验和研究,我陷入了困境。

这将是一个内容非常少的网站,因此我决定创建一个单页网站。我正在使用get_pages($args); 在我的首页中显示每页。php文件。

这很有效。现在我陷入了困境。。。我想使用一个页面来显示我的博客帖子,它将包含在我的一个页面流中,并与其他页面一样在我的WP\\U查询中调用。

到目前为止,我已经尝试了我能找到的记录最多的方法;这将更改用于在“设置”>“阅读”中显示帖子的页面。

为了确认

我有一个静态主页(FrontPage.php),我制作了一个页面模板,在一个名为home的页面中声明了它。使我能够在阅读设置中设置它,并且出于同样的原因,我创建了一个名为blog的页面(这个模板设置为defualt)。

enter image description here

我的帖子没有加载到此处设置的博客页面中。

我已经读到一个自定义查询可能会干扰,但我已经检查过了,在我的情况下不是这样的。

更新为使用WP\\u Query而不是get get\\u页面

首页。php

    <?php

        $args = array (
            \'post_type\' => \'page\',
            \'order\' => \'ASC\',
            \'orderby\' => \'menu_order\',
            \'posts_per_page\' => 5,
        );

        $query = new WP_Query( $args );

        if ( $query->have_posts() ) {
            while ( $query->have_posts() ) {
                $query->the_post(); ?>

                <a data-magellan-destination="<?php echo $post->post_name; ?>" name=\'<?php echo $post->post_name; ?>\'></a>
                <div id="<?php echo $post->post_name; ?>" class="page-wrap full">
                    <h2><?php the_title() ?></h2>
                        <?php the_content() ?>
                </div>

            <?php }
        } else {
    }

        wp_reset_postdata();
    ?>
以前有没有人遇到过这种情况?或者我的循环中缺少了一些阻止加载日志的内容。我正在学习php和WordPress,经验有限。我认为对博客页面内容本身的调用阻止了帖子信息的传递?我不确定。如有任何指导,将不胜感激。

提前感谢

3 个回复
SO网友:Otto

这并不像您所想的那样工作,因为get\\u页面并不像您所想的那样工作。

首先,要明白WordPress中的所有页面、所有内容实际上都是一篇“文章”。“页面”只是一种特殊类型的帖子。

现在,在正常的环境中,您不会调用“get\\uu”任何东西。这就是为什么你会感到困惑,因为你直接得到了东西,从而绕过了WordPress自动为你做的一切。调用get\\u pages时,它会直接获取这些页面。它没有将“静态主页”设置考虑在内,它只是按照指示进行操作并获取这些页面的内容。

请参阅,WordPress会自动解析URL并确定应该在该URL上显示的内容。这是根据重写系统进行的。重写规则将“漂亮”URL转换为WP\\U查询系统的一系列参数。WP\\u查询系统提取要显示的帖子,并将其保存在全局$WP\\u查询中。然后,模板系统根据全局WP\\U查询中的各种数据确定从主题中提取哪个模板,然后加载该模板。该模板实现了循环,该循环显示全局$wp\\u查询中包含的帖子。

综上所述:

URL通过重写进行处理重写创建查询参数用于确定要获取的帖子的查询参数模板系统检查查询以加载正确的模板正确的模板显示查询中的帖子这里的每个步骤都是自动进行的。你并不能真正控制它,这只是WordPress在创业时所做的。

“静态主页”设置修改了第三步,其中查询获取“主页”,它决定从博客获取帖子或获取一些静态页面。类似地,当您告诉它获取特定页面时,如果该页面被设置为博客,那么查询将获取显示在那里的帖子。其他一切都正常发生。

通过自己做get\\u页面,您绕过了这里的所有内容,只需说获取这些页面并显示它们,句号。系统中的任何其他内容都不会影响这一点,因为您已经绕过了这一切。

如果您想在一个页面上显示所有内容,那么您需要让它准确地获得您想要它显示的内容,然后再显示它。简而言之,“静态主页”不会使页面具有不同的内容,它只会更改查询选择的内容以显示在这些特定页面上。如果要获取帖子,则需要以某种形式调用get\\u posts,或使用自定义WP\\u查询,或修改主查询,或其他方式。get\\u pages()函数实际上无法检索博客文章。当然可以,但没有意义,因为get\\u posts()会这样做。

SO网友:Pieter Goosen

在开始之前,我建议您阅读:Creating a Static Front Page

确定,选择静态首页时,将使用以下模板之一显示首页

首页。php

第页。php

任何其他自定义页面模板

这是我从你的问题中了解到的你已经在做的部分

现在是博客页面。Wordpress将设置为博客页面的页面视为您的主页,我认为您会被困在这里。Wordpress会自动查找名为home的模板。如果找不到该模板,Wordpress将使用索引。php。您的博客。php只是被忽略了。作为索引。php和主页。php仅为post类型设置post, 当你访问你的博客页面时,你什么也看不到

在执行主查询以包括之前,必须更改它page 作为博客页面中的帖子类型,使用pre_get_posts. 不要创建自定义查询来更改主页或任何存档页,因为它们很麻烦,特别是在分页时。只需将以下内容添加到函数中即可。php。请注意is_home() check仅用于更改主页上的主查询,主页是您的博客页面

function include_page_in_home( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'post_type\', array( \'post\', \'page\' ) ); // Remove post if you only need page
    }
}
add_action( \'pre_get_posts\', \'include_page_in_home\' );
有关可检出的更多参数WP_Query 因为两者使用相同的参数。只需确保您使用的是主页中的默认循环。php或索引。php。

仅供参考,请在函数中使用以下内容。php开发时,don\'t use 它位于生产现场。如果您不确定某个特定页面正在使用哪个模板,这将打印页面标题部分中正在使用的当前模板

add_action(\'wp_head\', \'show_template\');
function show_template() {
    global $template;
    print_r($template);
}
为了扩展@Otto的答案,你可以在头版使用以下内容。php来显示您的页面。这只是抄本的复制版本,您可以根据需要进行调整

<?php

// The Query
$the_query = new WP_Query( \'posts_per_page=-1&post_type=page\' );

// The Loop
if ( $the_query->have_posts() ) {
    echo \'<ul>\';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo \'<li>\' . get_the_title() . \'</li>\';
    }
    echo \'</ul>\';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
其他资源

EDIT

如果需要显示最新的三个posts 从你的头版博客。php,然后您可以简单地通过自定义查询来实现这一点,类似这样的

<?php

// The Query
$the_query = new WP_Query( \'posts_per_page=3&order=DESC\' );

// The Loop
if ( $the_query->have_posts() ) {
    echo \'<ul>\';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo \'<li>\' . get_the_title() . \'</li>\';
    }
    echo \'</ul>\';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();

SO网友:Will S.

没有看到你的头版。php文件,如果您使用的是“博客”的帖子页面,我建议您这样做。为您的博客页面创建自定义页面模板。这与首页的方式相同。php除了两件事。。。

您需要在博客顶部发表以下评论。php文件(如果你要这样称呼它的话。

/*模板名称:博客*/

在仪表板中编辑博客页面,并选择博客作为模板。

或者您可以创建一个名为page blog的模板文件。php,您不必担心在仪表板中选择模板文件。

然后在页面模板中,运行post循环以获取您想要的任何内容,并以您想要的方式显示它。我不知道你到底想要什么内容,或者你想要它如何显示,否则我会帮你划掉一些东西。

再一次,这是我在没有看到你的头版之后最好的回答。php文件。如果有帮助,请告诉我!

结束

相关推荐

1 post, 2 templates

我想能够呈现两种不同的风格(2个模板)后。例如,假设我有post ID 133,我希望有两个url来访问它,因此它会呈现不同模板应用的位置。洛雷姆。com/render1/133。com/render2/1333,例如。。。或者可能是这样的:洛雷姆。com/post/133和lorem。com/post/133?模板=2您将如何操作?