我想要一个 PHP 脚本,它可以自动生成子页面列表及其标题、永久链接和特色图像。现在,我已经完成了大部分脚本,但是当我运行它时,它会打印出当前页面标题、缩略图和永久链接的三倍(有多少子页面的数量)。请参阅下面的脚本和示例:
主要脚本
$type = 'page'; // CHILD OR SUB-PAGE
$args = array(
'parent' => $post->ID,
'child_of' => $post->ID,
'post_type' => $type,
'post_status' => 'publish',
'sort_order' => 'DESC',
'sort_column' => 'menu_order'
);
$count = 1;
$pages = get_pages($args);
foreach ($pages as $page) { setup_postdata( $page );
?>
<?php if ($count % 2 == 0) { ?>
<?php get_template_part( 'partials/templates/element', 'infopic' ); ?>
<?php get_template_part( 'partials/templates/element', 'infolink' ); ?>
<?php } else { ?>
<?php get_template_part( 'partials/templates/element', 'infolink' ); ?>
<?php get_template_part( 'partials/templates/element', 'infopic' ); ?>
<?php } //END ELSE ?>
<div class="col-sm-12">
<div class="clear"> </div>
</div>
这是两个包含的文件。检查 $count
是否为偶数是为了交替内容布局文本 - 图像或图像 - 文本以获得更漂亮的布局。
元素 - 信息链接
global $page;
<div class="col-sm-6 dim-pad">
<div class="big-text">
<a href="<?php the_permalink($page->ID); ?>"><h5><?php echo get_the_title($page->ID); ?></h5></a>
</div>
</div>
元素 - 信息图片
<?php global $page; ?>
<div class="col-sm-6 dim-pad">
<div class="info-image">
<?php echo get_the_post_thumbnail($page->ID); ?>
</div>
</div>
但是它并没有打印出三个子页面“更多信息”、“更多信息二”、“更多信息三”,而是只打印出“信息”、“信息”、“信息”,即父页面。
有人能看出我哪里出错了吗?
最佳答案
您错误地使用了 setup_postdata()
。
要使 setup_postdata()
正常工作,您必须使用变量 $post
。
更改此:
foreach ($pages as $page) { setup_postdata( $page );
致:
foreach ( $pages as $post ) {
setup_postdata( $post );
然后在模板部分中删除 global $page;
并且不要将 $page->ID
传递给任何这些函数。
最后在 foreach 循环之后添加:
wp_reset_postdata();
这会将您的全局 $post
值恢复到父页面。
关于php - 生成 Wordpress 页面子级的标题和缩略图列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29169830/