我正在为一个客户构建一个WordPress主题,它与我以前构建的任何其他主题都不同,主页是一个分布在多个不同容器和样式的帖子集合。它应该看起来和感觉像一本杂志,在每个月初,9个不同的帖子同时发布,每个都属于不同的类别。很多帖子的风格都不同,我无法使用传统的循环:
<?php if(has_posts()) : while(has_posts)) : the_post(); ?>
// do stuff
<?php endwhile; endif; ?>
首先,我将解释我是如何解决这个问题的,然后描述我遇到的问题。
在index.php的顶部,我有以下php代码:
$slugPostMap = array();
$slugs = array(
'art', 'big-idea', 'books', 'educators', 'film',
'ministry-update', 'music', 'parents', 'students',
);
$args = array(
'limitposts' => 1,
'order' => 'date'
);
foreach($slugs as $slug){
$args['category_name'] = $slug;
$post = get_posts($args);
$slugPostMap[$slug] = $post;
}
这个
$slugs
数组是我需要查询的每个类别段塞的集合-每个都将显示一个日志。我的想法是,我可以循环使用这个数组,并使用另外一组固定的查询参数(
$args
,为每个slug检索最新的日志。当我在slug数组上循环时,我将查询结果存储在一个关联数组中。(
$slugPostMap
)其中“slug”类别指向“实际柱”。
稍后在页面正文中,我将从
$slugpostp邮件
使用类别段塞索引。下面是一个例子:
<?php
foreach($slugPostMap['ministry-update'] as $p):
setup_postdata($p);
?>
<a class="homepageVideoPostTitle" href="<?php the_permalink(); ?>"><?php the_date('F Y','','',true); ?></a>
<div class="homepageVideoPostSubtitle">
<?php the_title(); ?>
</div> <!-- end homepageVideoPostSubtitle -->
<div class="homepageVideoPostContent">
<?php the_excerpt(); ?>
</div>
<?php endforeach; ?>
我之所以在开头使用foreach循环,是因为,据我所知,几个核心的wordpress模板标签(
the_title()
,
the_permalink()
等)仅在循环中可用。因为我打电话来
setup_postdata()
在这里手动操作(在循环过程中在幕后调用),我还使用foreach来限制调用时发生的任何奇怪的巫毒事件的范围。
设置_postdata()
.
在大多数情况下,这是可行的。在上面的示例中,调用的结果
the_excerpt()
按预期显示。但是,其他一些模板标记没有返回任何值(
“永久链接”()
和
标题()
具体来说)。我没有得到任何错误,当我在一个真正的实时WordPress安装中尝试这个时,页面加载良好。
我假设问题在于我不了解如何在这种情况下正确地绕过循环,但是事实上没有任何错误或其他关于问题的线索,这让我来到了这里。
这是运行在某种风格的Linux上的Wordpress3.0。我有许多其他的WordPress安装程序在这个框中运行,没有问题,我可以使用这个默认主题的相同WordPress实例。
谢谢你抽出时间-对不起这部小说。如果我遗漏了任何相关细节,请告诉我。