Wordpress循环帖子的条件类

时间:2014-06-07 13:45:14

标签: php html css wordpress

css已经声明我所要做的就是添加一些div类。我的主题使用几乎空的index.php而没有html但使用get_template_part函数并为帖子类型调用各种模板部分,因此它有几个循环{template-name} .php文件。我已经复制了一个博客索引,并进行了一个新的循环修改。我博客的索引会调用带有修改的相应模板 - hooray 。但是我必须能够有条件地添加div类才能使转换完全正常工作。

当博客的index.php运行循环时,我希望能够有条件地将一个div类添加到第一个返回的帖子,将另一个div类添加到第二个,如果最后一个帖子是奇数,则添加一个第3级div。

这是我的loop-template4.php文件。

<?php /* If there are no posts to display, such as an empty archive page */ ?>
<?php if ( ! have_posts() ) : ?>
<div class="one"> /*I added this line here and it works for not found.
    <div id="post-0" class="post error404 not-found">
        <h1 class="entry-title"><?php _e( 'Not Found', 'smpl' ); ?></h1>
        <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.', 'smpl' ); ?></p>
            <?php get_search_form(); ?>
        </div><!-- .entry-content -->
</div>        
    </div><!-- #post-0 -->
<?php endif; ?>

<?php

<?php while ( have_posts() ) : the_post(); ?>
    /**
      * I need to conditionally add one of 3 div classes here:  
      * odd `<div class="one_half">`,   
      * even `<div class="one_half last">`or   
      * odd and last, `<div class="one">`  
      */

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

<h2 class="entry-title">
<a href="<?php the_permalink(); ?>" title="
 <?php printf( esc_attr__( 
     'Permalink to %s', 'smpl' ), the_title_attribute( 'echo=0' ) );
  ?>" rel="bookmark"><?php the_title(); ?></a>
</h2>


<?php do_action('skeleton_post_meta'); ?>

<?php if ( is_archive() || is_search() ) : // Only display excerpts for 
 archives and  search. ?>
    <div class="entry-summary clearfix">
    <?php if (ot_get_option('show_post_thumbnails') && has_post_thumbn
    nil()){
        echo '<div class="alignleft">';
        skeleton_thumbnailer('fourthree');
        echo '</div>';
    }?>
        <?php the_excerpt(); ?>
    </div><!-- .entry-summary -->

<?php else : ?>

<div class="entry-content">
<?php
if (ot_get_option('show_post_thumbnails') && has_post_thumbnail()) {
    echo '<div class="alignleft">';
    skeleton_thumbnailer('thumbnail');
    echo '</div>';
}?>
    <?php //the_content( __( 
    'Continue reading <span class="meta-nav">&rarr;</span>', 'smpl' ) );
    do_action('skeleton_content');
    ?>
    <div class="clear"></div>
    <?php wp_link_pages( array( 'before' => '<div class="page-link">' .
     __( 'Pages:', 'smpl' ), 'after' => '</div>' ) ); ?>
    </div><!-- .entry-content -->
<?php endif; ?>
</div> <!-- conditional div class -->
</div><!-- #post-## -->
<?php comments_template( '', true ); ?>

<?php endwhile; // End the loop. Whew. ?>

<?php /* Display navigation to next/previous pages when applicable */ ?>
<?php if (  $wp_query->max_num_pages > 1 ) {
    do_action('skeleton_page_navi');
}?>

所以问题:

是否可能,因为循环还没有循环,我需要根据循环结果的数量有条件地添加div类?

1 个答案:

答案 0 :(得分:2)

据我所知,没有办法知道循环中的最后一个帖子何时显示,所以首先我们需要在你的行`while(have_posts())之前添加一些代码:post()。对于上下文,我在这里复制了整个代码块,并添加了注释以显示新代码的位置:

<?php /* If there are no posts to display, such as an empty archive page */ ?>
<?php if ( ! have_posts() ) : ?>
<div class="one"> /*I added this line here and it works for not found.
    <div id="post-0" class="post error404 not-found">
        <h1 class="entry-title"><?php _e( 'Not Found', 'smpl' ); ?></h1>
        <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.', 'smpl' ); ?></p>
            <?php get_search_form(); ?>
        </div><!-- .entry-content -->
    </div>        
</div><!-- #post-0 -->
<?php endif; ?>
<?php
  /**
    * BEGIN: Additional code to add conditional classes
    */
  // How many posts are going to be displayed? Let's count here:
  $total = 0;
  while ( have_posts() ) : the_post();
      $total++;
  endwhile;
  // Reset the loop to actually start displaying them
  rewind_posts();

  // Add this line before your loop to prevent notices being thrown
  $count = 1;
while ( have_posts() ) : the_post(); ?>
<?php
// Add some conditions to determine the class
if ($count % 2) {
    // If the post displayed is an odd number
    $class = 'one_half last';
} else {
    // If the post displayed is an even number
    $class = 'one_half';
}

if ($count == $total && ($count % 2)) {
    // If the post is the last post, and it is odd
    $class = 'one';
}
// Finally, increment the count
$count++;
?>
<?php // If you need an extra div, just put it in like so... ?>
<div class="<?php echo $class; ?>">
    <?php
         // If you need the existing div to simply have the class added,
         // Then we pass it into the post_class() function
    ?>
    <div id="post-<?php the_ID(); ?>" <?php post_class($class); ?>>
        <h2 class="entry-title">