改变第一篇文章风格的最佳方式是什么?

时间:2012-02-28 作者:Cmorales

我正在构建一个自定义(儿童)主题,我想以不同于其他主题的方式(更大的图像,某些内容的不同位置)设计我循环的第一篇帖子。

哪种方法最好?我的“问题”是,我的主题支持不同的帖子类型,风格会因内容类型而异,因此我希望尽可能避免重复代码(即使用函数)。

由于我更习惯于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类就可以获得所需的所有内容)。

有没有更好的方法?也许是钩子什么的?

提前感谢!

2 个回复
最合适的回答,由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)
如果有人认为有比这更好的解决方案,请告诉我:)

SO网友:bueltge

我想你可以在[post_class()][1] 通过过滤器的功能;名称、字符串可以用于不同的值:标记或帖子标题?

下面的示例使用post的标题并将其添加到post的类中;如果您使用post_class() 标记中的post标记上的函数。也可以使用其他值进行此设计。

function fb_title_post_class( $classes ) {
    global $post;
    $classes[] = sanitize_title_with_dashes( get_the_title( $post->ID ) );
    return $classes;
}
add_filter( \'post_class\', \'fb_title_post_class\' );

结束

相关推荐

Functions.php Problem

当我在函数顶部添加第3-19行时。php,然后尝试更新图像。phpI get the error \"Warning: Cannot modify header information - headers already sent\" when I try to update my image.php.第3-19行的代码为“我的图像库”创建自定义的下一个/上一个链接,并将最后一个链接重定向到“更多库”页面。我的代码可以在这里看到:http://pastebin.com/Yen04t2z