获取页面内容的正确方式是什么?

时间:2015-12-14 作者:Boykodev

目标很简单-在页面上打印页面内容。我试过:

<?php the_content() ?>
<?= get_the_content() ?>
那么

<?php the_content(get_the_ID()) ?>
<?= get_the_content(get_the_ID()) ?>
他们都没有成功。

然后我找到了一个奇怪的解决方案:

<?= apply_filters(\'the_content\', get_post_field(\'post_content\', get_the_ID() )) ?>
为什么\\u content()和get\\u the\\u content()不起作用?

是否有比上一个更干净的解决方案来显示页面内容?

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

在我开始之前,请注意几点

永远不要使用php短代码,它们很糟糕,令人困惑,在某些服务器上默认不支持。嗯,他们一开始就不应该把它变成PHP。WordPress标准(并不意味着什么)也“禁止”使用短标签。使用正确的php标记,忘记shorttags甚至存在

  • the_content()get_the_content() 不接受post ID,这两个模板标记的firts参数为$more_link_text

  • get_the_content() 以及从post\\u内容字段检索到的内容是未过滤的内容,the_content 过滤器是应用于此未过滤内容的一组过滤器,其中包括以下过滤器wpautop 哪一个适用p 标记到the_content()

    人们普遍认为the_content()get_the_content() MUST 在回路内部使用。这并不完全正确,尽管确实不建议在循环之外使用它。就像get_the_ID(), get_the_content() 需要设置全局post数据($post = get_post()),因此如果全局范围内的循环外有可用的postdata,它将返回数据。

    你的问题很奇怪,如果我们看一下这里的源代码get_the_ID()get_the_content() 呼叫$post = get_post(), 和get_post() 退货$GLOBALS[\'post\'] 如果未传递ID,并且如果$GLOBALS[\'post\'] 都设置好了,这里似乎就是这样。get_post_field() 根据您成功返回页面内容,这意味着get_the_ID() 返回正确的页面ID,即我们是一个,这意味着get_the_content() 应该已经工作并且应该返回未过滤的页面内容(the_content() 应显示过滤后的页面内容

    无论如何,您将需要调试这一为什么事情不希望按预期工作的原因。要回答您关于在没有循环的情况下正确可靠地显示页面内容的问题,您可以访问查询的对象$post_content 属性,对其应用内容过滤器并显示内容。请注意,如果您使用query_posts 无论以何种方式,它都会打断保存查询对象的主查询对象。这就是do绝不能使用的主要原因query_posts

    $current_page = get_queried_object();
    $content      = apply_filters( \'the_content\', $current_page->post_content );
    echo $content;
    

  • SO网友:Danial

    显示当前帖子的内容。此模板标记必须位于while循环中。

    <?php 
        if ( have_posts() ) {
            while ( have_posts() ) {
                the_post();
                the_content(); 
            } // end while
        } // end if
    ?>
    
    更多信息:the_content() - WordPress Codex