显示(Wordpress)包含标题,缩略图和摘录的子页面

时间:2016-06-23 04:37:53

标签: php wordpress

提前为一个问题道歉,对于专家来说,我毫无疑问是相对明显的。我已经查看了WordPress Codex中的相应信息(the_post_thumbnail,the_excerpt等),但我还是不太熟悉.php还没有正确实现它。还在学习!

我试图在标准(WP)页面内显示子页面,包括其标题,缩略图和摘录。我可以通过以下方式让THUMBNAIL和EXCERPT完成所有工作:

    <div class="child-pages">
    <?php
        $pageChild = get_pages( array( 'child_of' => $post->ID, 'sort_column' => 'menu_order', 'sort_order' => 'ASC' ) );
            foreach( $pageChild as $page ) { 
    ?>
        <!-- loop: child page -->
        <div class="child">
            <header class="entry-header">
                <a href="<?php echo get_page_link( $page->ID ); ?>"><?php echo '<h3>'.$page->post_title.'</h3>'; ?></a>
            </header><!-- .entry-header -->
            <img src="<?php echo the_post_thumbnail_url( $page->ID ); ?>">
            <?php echo $page->the_excerpt; ?>
        </div>
    <?php } ?>
    </div>

到目前为止,我可以按正确的顺序查看正确子页面的链接/标题,但不能查看缩略图或摘录。显然,我没有正确地调用缩略图或摘录。有人可以纠正我吗?

我也尝试过这些行,这是由二十六个主题支持的:

            <a href="<?php echo get_permalink(); ?>"><?php twentysixteen_post_thumbnail(); ?></a>
            <?php the_excerpt(); ?>

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

缩略图不显示,因为函数the_post_thumbnail_url();显示当前帖子的缩略图,参数是指定图片的大小,而不是帖子。

$post->the_excerpt未必填写。如果您查看添加/编辑帖子屏幕,您会注意到两个文本字段,一个用于编辑帖子的内容,另一个用于摘录。摘录是可选的,因此函数the_excerpt()显示该字段的内容,但当它为空时,它将显示$post->the_content的前X个字符。

关于您的第二次尝试:功能the_excerpt()get_permalink()twentysixteen_post_thumbnail()不起作用,因为您没有正确设置帖子。

最简单的方法是在代码中添加setup_postdata()

$pageChild = get_pages( array( 'child_of' => $post->ID, 'sort_column' => 'menu_order', 'sort_order' => 'ASC' ) );
foreach( $pageChild as $page ) { 
    setup_postdata( $page ); 
    // now you can use all the fancy functions like `the_excerpt()`
    // add your output here
}

或者您可以使用WP_Query对象以推荐的方式执行此操作:

<?php
$args = array(
    'post_parent' => $post->ID,
    'orderby' => 'menu_order', 
    'order' => 'ASC' 
    );

$the_query = new WP_Query( $args ); ?>

<?php if ( $the_query->have_posts() ) : ?>

    <!-- pagination here -->

    <!-- the loop -->
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <h2><?php the_title(); ?></h2>
    <?php endwhile; ?>
    <!-- end of the loop -->

    <!-- pagination here -->

    <?php wp_reset_postdata(); ?>

<?php else : ?>
    <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>