“即将到来”的占位符博客帖子?

时间:2014-09-13 作者:Desi

我有一个页面设置为每页六篇文章,两行三篇文章。如果我只有一篇帖子,我希望其他五篇都有“占位符图片”,让观众知道更多的帖子即将发布。有点像这样:

enter image description here

我会创建占位符图像放在那里。

下面是我的博客是如何建立的。非常基本。以前有人做过这样的事吗?

<div id="article-list">

    <?php if ( have_posts() ) : ?>

        <?php while ( have_posts() ) : the_post(); ?>

        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <div class="post-info">
                <?php the_title( sprintf( \'<h1 class="entry-title"><a href="%s" rel="bookmark">\', esc_url( get_permalink() ) ), \'</a></h1>\' ); ?>
                <?php mobile_mix_posted_on(); ?>
            </div>

            <?php if ( \'\' != get_the_post_thumbnail() ) {
                the_post_thumbnail();
            } ?>

        </article><!-- #post-## -->

        <?php endwhile; ?>

        <?php mobile_mix_paging_nav(); ?>

    <?php else : ?>

        <?php get_template_part( \'content\', \'none\' ); ?>

    <?php endif; ?>

</div>

3 个回复
最合适的回答,由SO网友:gmazzap 整理而成

您可以将筛选器添加到\'loop_start\', 计算你的帖子数量,并注入所需数量的“假”帖子WP_Post DB中没有引用。

add_filter( \'loop_start\', function( $query ) {
  $module = $query->post_count % 6;
  $to_fill = $module === 0 ? 0 : 6 - $module ;
  if (
    (int) $query->post_count === 0
    || (int) $to_fill === 0
    || ! $query->is_main_query()
    || $query->is_singular()
    // probably you need to put other conditions here e.g. $query->is_front_page()
    // to affect only specific pages and not all...
  ) { 
    return;
  }
  $query->post_count += $to_fill;
  $query->found_posts += $to_fill;
  $fake = clone $query->posts[0];
  $fake->post_title = \'Coming Soon\';
  $fake->post_name = \'coming-soon\';
  $fake->is_fake = TRUE;
  $fake->ID = 0;
  $fake_posts = array_fill( 0, $to_fill, $fake );
  $query->posts = array_merge( $query->posts, $fake_posts );

} );
编辑:避免模板编辑现在我们必须防止虚假帖子,以获得永久链接

add_filter( \'the_permalink\', function( $permalink ) {
  if ( isset($GLOBALS[\'post\']->is_fake) ) {
    return \'#\';
  }
  return $permalink;
} );
并使用即将到来的图像作为后期缩略图:

add_filter( \'get_post_metadata\', function( $check, $pid, $key ) {
  global $post;
  if ( $key === \'_thumbnail_id\' && empty($pid) && isset( $post->is_fake ) ) {
    $check = 1; // just a non falsey number to pass has_thumbnail check
  }
  return $check;
}, PHP_INT_MAX, 3 );

add_filter( \'post_thumbnail_html\', function( $html, $pid ) {
  global $post;
  if ( empty($pid) && isset( $post->is_fake ) ) {
    $html = \'<img src="http://example.com/path/to/coming-soon.png" alt="coming Soon" />\';
  }
  return $html;
}, PHP_INT_MAX, 2 );

SO网友:birgire

这里有一个想法the_posts 过滤方式不必修改当前模板代码:

/**
 * Append "Coming Soon" posts, if there are not enough posts
 *
 * @see http://wordpress.stackexchange.com/a/161275/26350
 */
add_filter( \'the_posts\',
    function( $posts, $q )
    {
        if( ! is_admin() && $q->is_main_query() )
        { 
            $count = count( $posts );
            $ppp   = $q->query_vars[\'posts_per_page\'];

            // Assume there\'s at least one post available, before filling up:
            if( $count > 0 && $count <= $ppp  )
            {
                // Cet "Coming Soon" post
                $tmp = get_post( 123 ); // Adjust this ID to your needs

                // Fill up with the "Coming Soon" post:
                for( $i = $count + 1 ; $i <= $ppp; $i++ )
                {
                    $posts[] = $tmp;
                }
            }
        }
        return $posts;
    }
,99, 2 );
这假设您很快就会有一个帖子/页面,您只需修改帖子ID即可。

请注意,这是针对PHP版本5.3+。

更新:感谢@G.M.提供的关于跳过pre_get_posts

我希望你能根据自己的需要修改这个。

SO网友:Rarst

花了50分钟向同事解释被接受的答案,但没有成功。。。

我想指出的是,对于简单的情况,对post计数的基本检查可能完全足以模板化此类输出:

if ( 6 > $wp_query->post_count ) {

    // placeholder output
}

结束

相关推荐

Wp.getPosts,状态=‘trash’,使用node.js

我想知道如何设置wp的过滤器选项。获取帖子。我想获得状态为“垃圾”的帖子。筛选器当前为空,并返回除垃圾以外的所有帖子。我正在使用xmlrpc wordpress api和节点wordpress插件。https://github.com/scottgonzalez/node-wordpress这是我当前的代码:wp.getPosts(\'<filter>\', [\'title\',\'status\'], function(err, data){ }); 我不确定过