无法从自定义POST类型循环获取POST内容

时间:2017-08-23 作者:Zach Smith

由于某些原因,我无法使用以下代码输出自定义帖子类型的内容。我错过了什么?它适用于get_the_title 但使用get_the_content 使用相同的参数不会产生任何结果。

<?php
            $query = new WP_Query( [\'post_type\' => \'testimonials\', \'posts_per_page\' => -1 ] );
            foreach($query->get_posts() as $testimonial):
            $meta = get_post_meta($testimonial->ID);
            foreach($meta as &$m){
                if(is_array($m)){
                    $m = $m[0];
                }
            } ?>

            <div class="content"><?=get_the_content($testimonial->ID); ?></div>
            <div class="author">- <?=get_the_title($testimonial->ID); ?> / <span class="company_name"><?=$meta[\'_testimonial_company_name\'] ?></span></div>
            <div class="link"><a href="<?=home_url(\'/testimonials\'); ?>" title="View All Testimonials">View More</a></div>
            <?php endforeach; ?>

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

正如其他答案所提到的,你不在循环中,所以get_the_*() 功能无法正常工作。既然你在循环$query->get_posts() 您可以使用WP_Post 对象

像这样的东西会有用的。

foreach($query->get_posts() as $testimonial):
    $meta = get_post_meta($testimonial->ID);
    foreach($meta as &$m){
            if(is_array($m)){
                $m = $m[0];
            }
        }

    <div class="content"><?= do_shortcode($testimonial->post_content); ?></div>
    <div class="author">- <?=$testimonial->post_title; ?> / <span class="company_name"><?=$meta[\'_testimonial_company_name\'] ?></span></div>
    <div class="link"><a href="<?=home_url(\'/testimonials\'); ?>" title="View All Testimonials">View More</a></div>            

<?php endforeach;?>
根据您的具体情况,您可能希望wpautop() 内容也一样。例如。do_shortcode(wpautop($testimonial->post_content))

如果要设置辅助循环,可以;但是,您不应该使用setup_postdata() 除非您确定自己不是在嵌套循环中工作,因为这会修改全局post对象。

SO网友:Johansson

get_the_content() 必须在循环中使用,并且需要设置帖子的数据。

您应该使用setup_postdata( $post ); 首先,然后您可以使用get_the_content().

然而,我在这里看到了几个问题:

首先,您可以使用循环,而不是foreachWP_Query();.使用the_content() 而不是get_the_content(), 确保也应用了过滤器以下是代码的优化版本:

<?php
$args = array( 
    \'post_type\' => \'testimonials\', 
    \'posts_per_page\' => 100
);
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
        $q->the_post();
        $company_name = get_post_meta( get_the_ID(), \'_testimonial_company_name\', true );
        ?>
        <div class="content"><?php the_content(); ?></div>
        <div class="author">- <?php the_title(); ?> / <span class="company_name"><?php echo $company_name; ?></span></div>
        <div class="link"><a href="<?php echo home_url( \'/testimonials\' ); ?>" title="View All Testimonials">View More</a></div><?php
    }
}
?>

结束

相关推荐

添加Google Analytic in Loop中浏览量最高的帖子

I\'m trying to find a solution to display the 5 post most viewed ( from google analytics) in my loop.The only way I find at the moment is to use this plugin \'Google Analytics Top Content Widget\'However, I don\'t wan\'t to use that and I\'ll wish to be a