使用foreach post循环将分页添加到我的自定义博客页面

时间:2018-03-18 06:03:36

标签: php wordpress custom-wordpress-pages

我在自定义wordpress主题中构建了一个自定义博客页面,我正在尝试为博客页面添加分页。我正在使用foreach循环,而不是标准的“if post”循环。

一切正常,但是我不知道在哪里添加“paged”作为参数。

这是我的代码:

<?php if (is_page( 'Blog' )) : ?>

                                <?php
                                    //Get the Posts
                                    $posts = get_posts();
                                    foreach ($posts as $post) :
                                    setup_postdata( $post );

                                    //Setup Post data
                                    $haystack = get_the_category($post->ID);
                                    $i = count($haystack);
                                    $string = "";

                                    for ($j=0; $j < $i; $j++) {
                                        $string .= " ";
                                        $string .= $haystack[$j]->slug;
                                    }

                                    $link = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'large', false );

                                    $href = get_the_permalink();

                                    $theCat = wp_get_post_categories($post->ID);

                                    if (has_post_thumbnail($post->ID)){
                                        $theCols = 'span12'; 
                                        $imgWidth = 'span4';
                                        $contentWidth = 'span8';
                                    } else {
                                        $theCols = 'span12'; 
                                        $imgContainer ='display: none;';
                                        $contentWidth = 'width: 100%;';
                                    } 
                                ?>

                                <div class="<?php echo $string;?>">
                                    <div id="post-<?php the_ID(); ?>" class="post-content <?php echo $theCols;?> group nopad">
                                        <div class="post-content--image <?php echo $imgWidth;?> <?php echo $imgContainer;?>">
                                            <img src="<?php echo $link[0]; ?>">
                                        </div>

                                        <!-- Post Content -->
                                        <div class="post-content--container <?php echo $contentWidth;?>">
                                            <?php
                                                $post_title = get_the_title();
                                                $post_title = explode(' ', $post_title);
                                                $title = '';

                                                for ($i=0; $i < 5 ; $i++) {
                                                    $title .= $post_title[$i];
                                                    $title .= ($i == 50) ? "..." : " ";
                                                }
                                            ?>

                                            <p class="post-content--date"><?php echo get_the_date('d M Y'); ?></p>

                                            <h4 class="post-content--heading"><?php echo $title;?></h4>

                                            <p class="post-content--cat"><?php echo $string;?></p>

                                            <div class="post-content--text">
                                                <?php
                                                    if ($theCat){ 
                                                        $str = substr(get_the_excerpt(), 0,255); 
                                                    } else {
                                                        $str = get_the_excerpt();
                                                    }

                                                    $n = strpos($str, '<a');

                                                    if ($n > 0){
                                                        $rest = substr($str, 0, $n);
                                                        echo $rest;
                                                    } else {
                                                        echo $str;
                                                    }
                                                ?> ...
                                            </div>

                                            <a href="<?php echo $href;?>"><button class="see-more-btn">Read More</button></a>

                                        </div>
                                    </div>
                                </div>

                            <?php endforeach;
                                wp_reset_postdata();?>

                            <?php else : ?>

                                    <p>Critiria Not Found</p>

                            <?php endif; ?>
我错过了什么?感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您要使用get_posts功能,则需要设置posts_per_pageoffset参数。您需要检查当前页面并根据每页显示的帖子数和当前页面设置偏移量。例如。在第2页上,每页显示5个帖子,您需要将偏移量设置为5,以便跳过前5个帖子。

注意:如果不设置偏移量参数,posts_per_page参数将无效。

$args = array(
    'posts_per_page'   => 5,
    'offset'           => 0
);
$posts_array = get_posts( $args );

另一种方法是使用WP_Query而不是传递offset参数,你只需传递页面参数,就像下面的示例get_query_var('paged')获取?paged = x的值一样它未设置将默认为&#39; 1&#39;。

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query( array( 'paged' => $paged ) ); 

如果您要使用WP_Query,则需要从foreach更改为:

if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        $the_query->the_post();

        $post_id = get_the_ID();
        $haystack = get_the_category($post_id);
        $i = count($haystack);
    }
} 

要在WP_Query之后输出分页链接,您可以使用paginate_links功能,如下所示。使用WP_Query的优势在于,您还可以获得与found_posts中当前查询参数匹配的帖子总数以及您可能需要的其他值,例如max_num_pages

echo paginate_links( array(
    'base'         => '%_%',
    'total'        => $query->max_num_pages,
    'current'      => max( 1, get_query_var( 'paged' ) ),
    'format'       => '?paged=%#%',
    'show_all'     => false,
    'prev_next'    => true,
    'prev_text'    => __('« Previous'),,
    'next_text'    => __('Next »'),
    'add_args'     => false,
    'add_fragment' => '',
) );

get_posts:https://codex.wordpress.org/Template_Tags/get_posts

WP_Query:https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters paginate_links:https://codex.wordpress.org/Function_Reference/paginate_links