当存档页面中POST元素较少时,如何显示静态占位符?

时间:2011-12-10 作者:francois

我正在为一个只包含图像缩略图的主题创建一个归档页面。页面布局最多可以包含12个缩略图。所以作为查询,我希望能够得到两个不同的结果。

如果有12个缩略图,请全部显示。

如果小于该最大值,请在其余部分填充占位符,以使结果达到12。

这是我的初稿:

 <?php 

    $count = 1;
    query_posts( \'posts_per_page=12&order=ASC\' );

    if (have_posts()) : while (have_posts()) : the_post(); ?>
        <div class="archive-post-single">
            <?php if ( has_post_thumbnail() ) { 
            ?>


            <a href="<?php echo get_permalink(); ?>"><?php the_post_thumbnail(); ?></a>


            <?php

            }

            ?>  

        </div>


        <?php $count++;
      endwhile; endif; ?>

    <?php if ($count < 12) { ?>

<div class="archive-post-single">
<img src="<?php bloginfo(\'template_directory\'); ?>/images/thumb.png" alt="" />
</div>
<?php } ?>
    </div>  

        <?php wp_reset_query(); ?>

3 个回复
SO网友:Ralf912

PHP中有两种循环:

对于未知数量的元素(while()、foreach()、do()while等)

  • 对于特定数量的元素(for())
    • 您需要一个具有特定数量元素(在本例中为12个元素)的循环。因此,while循环不是您需要的。首先看看WordPress中通常使用的循环

      $posts = new WP_Query( \'numberposts=12\' );
      echo \'<ol>\';
      
      while( $posts->have_posts() ) {
        $posts->the_post();
          $title = get_the_title();
          echo \'<li>\' . $title . \'</li>\';
      }
      
      echo \'</ol>\';
      
      只要还有帖子,这个循环就会显示帖子。如果只有五个帖子,则只显示五个帖子。

      假设您只有五篇文章,但希望显示12个列表元素。让我们从创建12个列表元素的循环开始。

      echo \'<ol>\';
      for( $number = 0; $number < 12; $number++ ) {
        // create list element
      }
      echo \'</ol>\';
      
      现在,我们需要在循环中使用一个开关来决定是否要显示另一个帖子。如果有其他帖子,请显示帖子标题。如果不是,则显示其他内容,如占位符。

      echo \'<ol>\';
        for( $number = 0; $number < 12; $number++ ) {
      
         if( $number < $post_count ) {
           // display post
         } else {
           //display placeholder
         }
      
      echo \'</ol>\';
      
      只要当前循环项目的数量小于所有帖子的数量,就显示一篇帖子,否则显示占位符。

      现在我们只需要帖子的数量。这很简单:$post_count = $posts->post_count;

      $posts = new WP_Query( \'numberposts=12\' );
      $post_count = $posts->post_count;
      
          echo \'<ol>\';
      
          for( $number = 0; $number < 12; $number++ ) {
      
            if( $number < $post_count ) {
              // display the post
              $posts->the_post();
              $title = get_the_title();
              echo \'<li>\' . $title . \'</li>\';
      
            } else {
              //display the placeholder
              echo \'<li>No more posts</li>\';
      
            }
          }
      
          echo \'</ol>\';
      
      我希望这将有助于澄清while循环和for循环之间的区别。

    SO网友:Joshua Abenazer

    希望这能起到作用。如果您添加meta_key => _thumbnail_id 对于您的查询,它将只查询带有特色图像的帖子。因此,您可以删除has_post_thumbnail() 同时检查。

    $count = 0;
    query_posts( array( \'posts_per_page\' => 12, \'order\' => \'ASC\', \'meta_key\' => \'_thumbnail_id\' ) );
    
    if (have_posts()) : while (have_posts()) : the_post(); ?>
    
            <div class="archive-post-single">
                <a href="<?php echo get_permalink(); ?>"><?php the_post_thumbnail(); ?></a>
            </div><?php
    
            $count++;
        endwhile;
    endif;
    
    wp_reset_query();
    
    if ( $count < 12 ) {
        for ($i = $count; $i <= 12; $i++) { ?>
    
            <div class="archive-post-single">
            <img src="<?php echo get_stylesheet_directory_uri(); ?>/images/thumb.png" alt="" />
            </div><?php
    
        }
    }
    

    SO网友:kaiser

    救援插件我为这种情况写了一个插件。它的名字很简单»WP default img« 可以在GitHub抓到。

    用法很简单:添加图像大小。回显占位符。完成。

    // functions.php during init:
    add_image_size( \'default_img\', 80, 80, true );
    
    echo wp_default_img( array( 
         \'url\'  => get_site_url( null, \'your_path\' ).\'/some_img.jpg\'
        ,\'size\' => \'default_img\' 
    ) );
    
    它还有两个过滤器:

    • wp_default_img_attr // 默认属性(高度/宽度/高度/等)
    • wp_default_img // 该插件的输出/结果很旧,但仍然有效。但老实说,这些天我会把它缩短得更短,也更容易(从内部角度来看)

      核心功能我还添加了Trac ticket 我看到很多人都需要这个功能,所以我想把它放在核心。

      如果你认为这是必要的,只需将自己添加到票证中并发表评论即可。如果它流行起来,也许它会进入核心。

    结束

    相关推荐

    显示Archives.php中的所有自定义帖子类型

    我该怎么做?archive.php 只有以下内容:wp_get_archives(\'type=monthly\'); 以及wp_get_archives() 没有显示所有帖子类型的参数。我也认为archive-[post_type].php 不是我要找的,因为我希望所有帖子类型都显示在一个归档页面中。谢谢W