模板标签在页面模板中不起作用

时间:2016-11-23 作者:L-HAZAM

我创建了一个页面模板,并使用此代码调用了一篇包含短代码的帖子:

$post_id = 129;
if( get_post_status( $post_id ) == \'publish\' ) {
    the_content();
}
问题是这段代码在索引中运行良好。php,但不在我的页面模板中。为什么会这样?

请帮忙。

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

您的帖子无法正确显示的原因是the_title(), the_permalink(), 和the_content() (已调用Template Tags ) 只能在内部使用"The Loop" 或者只要设置正确。有两个选项可以正确显示您的内容:

Functions: get_post(), setup_postdata() and wp_reset_postdata()

首先,需要获取WP\\u Post对象并将其传递到setup_postdata() 功能,以便WordPress可以设置模板标记以提取正确的内容。最后,我们需要重置global $post 通过调用wp_reset_postdata().

global $post;               //  Get the current WP_Post object.

$post = get_post( 129 );    // Get our Post Object.
setup_postdata( $post );    // Setup our template tags.

if( \'publish\' == $post->post_status ) {
    the_content();
}

wp_rest_postdata();         // Reset the global WP_Post object.

Tad Easier using apply_filters()

这有点直截了当,不需要太多代码,这很好。您将无法像上面的示例中那样访问模板标记,但如果您只是显示帖子内容并处理其短代码,则不需要模板标记。

$post_id = 129;

if( \'publish\' == get_post_status( $post_id ) ) {
    $post_content = get_post_field( \'post_content\', $post_id );
    echo apply_filters( \'the_content\', $post_content );
}
以上内容从数据库中获取,然后通过WordPress过滤器运行,该过滤器处理the_content() 钩子为我们提供所需的输出、已处理的短代码以及所有内容。

SO网友:GKS

您可以使用get_post() 函数通过post id获取帖子内容。

$post_id = 129;
if( get_post_status( $post_id ) == \'publish\' ) {

    $post_content = get_post($post_id);
    $content = $post_content->post_content;
    echo apply_filters(\'the_content\',$content);
}

相关推荐