从循环外部获取帖子内容


Answers:


39

您可以get_page()用来返回$post静态页面的对象:

$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;

编辑

同样,您可以使用get_post()返回$post帖子的对象:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;

使用此代码时,短代码仍然有效吗?
Tim Baas 2014年

只是发现事实并非如此。setup_postdata( $post );首先使用,之后再使用the_content();
Tim Baas 2014年

4
您可以跑步apply_filters( 'the_content', $post_object->post_content );
内森·鲍威尔

6

要获取循环之外的帖子内容,您可以编写如下内容

global $post;
$content = $post->post_content;

if ( !empty( $content ) ) :
    echo $content;
endif;

3

如果您的内容包含简码,则应使用:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );


do_shortcode除了说“这可能很慢”和“您可以只使用短代码调用的功能”之外,该页面没有提供令人回避的理由。这些原因仅在最简单的情况下最不重要。如果在其他地方生成了简码,或者存在多个简码,或者将简码与其他内容和标记混合在一起,则失败。没有令人信服的理由,我不同意避免这种说法do_shortcode。这闻起来像过早的优化
杰夫

而且,这还增加了您的代码与原始短代码的代码之间的耦合。如果简码的后备方法曾经被重命名或签名发生了变化,您的代码就会中断。
杰夫

1

为了完整起见,以蒂姆的上述评论为基础,并受斯蒂芬·哈里斯Stephen Harris)的文章的启发,支持使用的解决方案the_content()是:

$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );

因此,将应用过滤器(将插入段落等),并且可以使用简码。


这几乎使我的浏览器崩溃了://取消了&符的帮助,但仍然没有解析短代码。
Zade 2015年

0

由于您知道目标发布ID(302),因此您可能会发现可以在循环外使用的这种速记语法很有用(尽管其性能与任何其他替代方法几乎相同:)

echo(get_post_field('post_content',302));

0

您可以使用该get_post_data()函数在循环外获取帖子。将此代码放在functions.php中

function get_post_data($postId) {
    global $wpdb;
    return $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID=$postId");
}

然后添加此代码段以对流程进行更多控制

<?php $data = get_post_data(302);
    echo $data->post_date;     // post date
    echo $data->post_title;    // post title
    echo $data->post_content;  // post content
    echo $data->comment_count; // comments number
?>

0

如前所述,您可以将解决方案与get_post和一起使用$post_object->post_content,但不要忘记在使用该post对象之前添加检查:

function get_post_content( $post_id = null ) {
    $post_object = get_post( $post_id );
    if ( ! $post_object ) { return ''; }
    //else

    return apply_filters('the_content', $post_object->post_content);
}

echo get_post_content( $other_post_id );


-2

使用wp_reset_postdata();它会起作用..(编辑)

<?php 
$args = array(
        'post_type' => 'posttype',
        'p' => 'post_id'
       );
$the_query = new WP_Query( $args );
if( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <?php the_content(); ?>
    <?php endwhile; endif; 
wp_reset_postdata();
?>

posttype可以是“ post”,“ page”或您的自定义帖子类型。这里p = 302是您的帖子ID。希望它能起作用。


2
query_posts除非需要中断页面功能,否则不要使用。始终使用WP_Queryget_posts进行自定义查询:-)
Pieter Goosen 2015年

是的..你是对的..它也可以Wp_Query ..找到相同的结果..
Jahirul Islam Mamun 2015年

还有一个pre_get_posts过滤器和the_post。这么多细节。
内森·鲍威尔

-3

您可以将内容放在类别X中,并在之前使用query_post,如下所示:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.