WordPress Category y.php查询特色新闻、分页和重复帖子

时间:2013-04-03 作者:user30944

我正在创建的一个网站有一些问题,在新闻页面上有一个新闻类的特色帖子,然后在更多的新闻类帖子下,但遗漏了特色新闻项目,因为我不想重复该项目。

例如

page 1

  • 特色帖子-第1篇第2篇第3篇第4篇第5篇

    page 2

    <第6篇第7篇第8篇第9篇以此类推。。。

    到目前为止,我遇到了许多不同的问题,这些问题是由解决问题的不同方法造成的。我已经让第1页的最后一篇文章在第2页重复,我有分页中断,认为第1页有3页,然后在每一页上都说有5页,然后就变得一团糟了。

    这是我目前拥有的代码,它不起作用,如果有人能帮助我,那将是非常棒的。基本上,我需要的是我的新闻类别列表,例如,在第一页上有5篇文章,其中一篇文章被特写(在与其他文章不同的一行中,它们被包含在一行中),而所有其他页面都有4篇文章,所有这些文章都要正确分页,并且没有重复的文章。

    希望这足够继续下去。

    (代码块中每页的帖子数量仅用于测试目的,不要想写很多测试帖子)

    <?php get_header(); ?>
    
    <?php global $wp_query;  
    
    $total_pages = $wp_query->max_num_pages;  
    
        $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
    
    ?>
    
    
        <?php if(is_paged()) : ?>
            <section class="content">
    
                <div class="news-list">
                <div class="row">
    
                <?php if (have_posts()) : ?>
                <?php while (have_posts()) : the_post(); ?>
    
                    <article class="col span_6 news-item">
                        <?php the_post_thumbnail(); ?>
                        <h3><?php the_title(); ?></h3>
                        <p><?php echo limit_words(get_the_excerpt(), \'25\'); ?>...</p>
                        <p class="date"><?php echo get_the_date(); ?></p>
                        <span class="readmore"><a href="<?php the_permalink(); ?>"><?php echo get_post_meta($post->ID, \'block_link\', true); ?>Full story</a> »</span>
                    </article>
    
    
                <?php endwhile; 
                    if ($total_pages > 1){  
    
                    $current_page = max(1, get_query_var(\'paged\'));  
    
                    echo \'<div class="page_nav">\'; 
    
                    echo paginate_links(array(  
                      \'base\' => get_pagenum_link(1) . \'%_%\',  
                      \'format\' => \'page/%#%\',  
                      \'current\' => $current_page,  
                      \'total\' => $total_pages,  
                    ));  
    
                    echo \'</div>\'; 
    
                    }  ?>
                <?php endif; ?>
    
                </div>
                </div>
    
            </section>
    
    
        <?php else : ?>
    
            <section class="content">
    
                <?php query_posts(\'showposts=1\'); ?>
    
                <?php if (have_posts()) : ?>
                <?php while (have_posts()) : the_post(); ?>
    
                    <section class="feature-post">
                    <div class="row">
    
                        <div class="col span_6">
                            <?php the_post_thumbnail(); ?>
                        </div>
                        <div class="col span_3">
                            <h3><?php the_title(); ?></h3>
                            <p><?php echo limit_words(get_the_excerpt(), \'25\'); ?>...</p>
                            <p class="date"><?php echo get_the_date(); ?></p>
                            <span class="readmore"><a href="<?php the_permalink(); ?>"><?php echo get_post_meta($post->ID, \'block_link\', true); ?>Full story</a> »</span>
                        </div>
                        <div class="col span_3">
    
                        </div>
    
                    </div>
                    </section>
    
    
                <?php endwhile; ?>
    
                <?php endif; wp_reset_query(); ?>
    
            </section>
    
            <div class="news-list">
                <div class="row">
                <?php global $query_string; ?> 
                <?php query_posts( $query_string . \'&offset=1\' ); ?>
                <?php if (have_posts()) : ?>
                <?php while (have_posts()) : the_post(); ?>
    
                    <article class="col span_6 news-item">
                        <?php the_post_thumbnail(); ?>
                        <h3><?php the_title(); ?></h3>
                        <p><?php echo limit_words(get_the_excerpt(), \'25\'); ?>...</p>
                        <p class="date"><?php echo get_the_date(); ?></p>
                        <span class="readmore"><a href="<?php the_permalink(); ?>"><?php echo get_post_meta($post->ID, \'block_link\', true); ?>Full story</a> »</span>
                    </article>
    
    
                <?php endwhile; 
                    if ($total_pages > 1){  
    
                    $current_page = max(1, get_query_var(\'paged\'));  
    
                    echo \'<div class="page_nav">\'; 
    
                    echo paginate_links(array(  
                      \'base\' => get_pagenum_link(1) . \'%_%\',  
                      \'format\' => \'page/%#%\',  
                      \'current\' => $current_page,  
                      \'total\' => $total_pages,  
                    ));  
    
                    echo \'</div>\'; 
    
                    }  ?>
                <?php endif; ?>
    
                </div>
                </div>
    
        <?php endif; ?>
    
    <?php get_footer(); ?>
    
    我使用此代码获得以下内容

    Page 1

    特色帖子-第1篇第2篇第3篇第4篇第5篇

    page 2

    <第5后6后7后8后

    page 3

    <第9后10后。。。以此类推,在第2页之后,分页工作正常,没有重复的帖子:S

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

首先,我们可以把所有query_posts 模板中的业务。总有比使用更好的方法query_posts.

如果主要目标是在第一页上有5篇帖子,在随后的所有页面上有4篇帖子,那么在通过主题的functions.php 连接到pre_get_posts 行动

这基本上是说“如果是主页和主查询,请检查页码-如果小于第2页,请加载5篇帖子,否则请加载4篇。”

function wpa_featured_posts_per_page( $query ){
    if( $query->is_home() && $query->is_main_query() ){
        if( 2 > $query->query_vars[\'paged\'] ){
            $query->set( \'posts_per_page\', 5 );
        } else {
            $query->set( \'posts_per_page\', 4 );
        }
    }
}
add_action( \'pre_get_posts\', \'wpa_featured_posts_per_page\' );
至于第一篇文章的风格不同,您可以查看全局$wp_query->current_post 如果等于零或大于零,则在循环中输出不同的标记(当前的\\u post索引为零,从零开始,然后从零开始)。

您还可以通过调用rewind_posts(); 重置内部post计数器。

结束

相关推荐

get_categories() for only CPT

在我正在工作的网站上,我有作为自定义帖子类型的作业和作为自定义分类法的位置。这些位置由作业、职位和其他CPT使用。我正在为这些工作制作一个小过滤器,并希望将所有位置的列表显示为链接,单击其中一个后,它将对页面进行排序,以仅显示该位置的工作。使用简单链接查询。我正在使用get_categories() 生成位置列表,但该函数的问题是,它不允许我指定帖子类型并显示所有具有任何类型帖子的位置。因此,我最终得到了一个并非所有位置都有工作的列表,当单击该链接时,它将显示404页。 <?p