我正在构建一个自定义(儿童)主题,我想以不同于其他主题的方式(更大的图像,某些内容的不同位置)设计我循环的第一篇帖子。
哪种方法最好?我的“问题”是,我的主题支持不同的帖子类型,风格会因内容类型而异,因此我希望尽可能避免重复代码(即使用函数)。
由于我更习惯于OOP,我的理想方案是向视图传递一个变量,并在每个内容类型的循环中检查它(这样我就可以重用TwentyEleven模板中的大部分代码)。据我所知,这是不可能的(如果我错了,请纠正我)。
现在,我要做的是:
function electric_index_loop($readMore = 0) {
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$args = array(
//Excluimos los "miniposts" (citas, estados, enlaces...) del listado
\'tax_query\' => array(
array(
\'taxonomy\' => \'post_format\',
\'field\' => \'slug\',
\'terms\' => array(\'post-format-aside\', \'post-format-link\',
\'post-format-status\', \'post-format-quote\'),
\'operator\' => \'NOT IN\'
)
),
\'posts_per_page\' => 5,
\'paged\' => $paged
);
// The Query
query_posts($args);
// The Loop
if (have_posts()) {
$post_count = 0;
global $more;
$more = $readMore; // 0 fuerza que se muestre sólo el "excerpt", 1 fuerza que se muestre todo el contenido
twentyeleven_content_nav(\'nav-above\');
while (have_posts()) {
the_post();
if ($post_count == 0) {
get_template_part(\'highlight\', get_post_format());
} else {
get_template_part(\'content\', get_post_format());
}
$post_count++;
}
} else {
?>
<article id="post-0" class="post no-results not-found">
<header class="entry-header">
<h1 class="entry-title"><?php _e(\'Nothing Found\', \'twentyeleven\'); ?></h1>
</header><!-- .entry-header -->
<div class="entry-content">
<p><?php _e(\'Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post.\', \'twentyeleven\'); ?></p>
<?php get_search_form(); ?>
</div><!-- .entry-content -->
</article><!-- #post-0 -->
<?php
}
wp_reset_query();}
如您所见,我检查了我在函数中创建的循环中的计数器,如果当前帖子是第一篇,我会加载一个不同的模板(“突出显示”)。我必须为不同类型的内容创建不同的模板(在某些情况下,这很糟糕,因为在某些情况下,我只需一个CSS类就可以获得所需的所有内容)。
有没有更好的方法?也许是钩子什么的?
提前感谢!
最合适的回答,由SO网友:Cmorales 整理而成
现在,我找到的最佳解决方案是在函数中传递一个全局变量。php,因此:
while (have_posts()) {
the_post();
if ($post_count == 0 || is_sticky()) {
global $highlight;
$highlight = true;
}else{
$highlight = false;
}
get_template_part(\'content\', get_post_format());
$post_count++;
}
然后,我检查视图中的变量。这样,我就不需要创建更多文件:
global $highlight;
?>
<article id="post-<?php the_ID(); ?>" <?php $highlight == true ? post_class(\'highlight\') : post_class(); ?>>
(more code)
如果有人认为有比这更好的解决方案,请告诉我:)