使用分页为wordpress构建存档页面

时间:2015-09-17 16:10:04

标签: php jquery wordpress pagination

我需要为大约30.000个帖子构建一个存档页面。我尝试使用wordpress的标准存档方法,但它并不能完全覆盖我想要做的事情。

这是我到目前为止所做的:

<?php
/*
Template Name: Archives
*/
get_header(); ?>

<div id="container">
<div id="content" role="main">

    <?php
        // Get total number of posts for pagination
        $count_posts = wp_count_posts();
        $published_posts = $count_posts->publish;

        $args = array(
            'post_type' => 'post',
            'posts_per_page' => 50
        );

        $post_query = new WP_Query($args);
        ?>
        <table style="width:100%">
        <tr>
            <th>Post</th>
            <th>Datum</th>
            <th>Categorie</th>
        </tr>
        <?php

        if($post_query->have_posts() ) {
            while($post_query->have_posts() ) {
                echo "<tr>";
                $post_query->the_post();
                ?>
                <td><a href="<?php the_permalink() ?>" rel="bookmark" title="Link naar <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                <?php
                echo "<td>" . get_the_date() . "</td>";
                $category_list = get_the_category_list( ', ' );
                if ( $category_list )
                    echo "<td>" . $category_list . "</td>";
                echo "</tr>";
            }
        }
        echo "</table>";
    ?>

</div><!-- #content -->

现在我在一个页面中拥有所有帖子并不是很容易使用。所以我需要有一个分页来给出更多的概述。我知道这一定是可能的,但我真的不知道如何解决这个问题。

真的希望有人可以用这个来帮助我和一些人。也许还有另一个解决方案,我找不到。

2 个答案:

答案 0 :(得分:0)

更改参数:

$args = array(
    'post_type' => 'post',
    'posts_per_page' => 50,
    'paged' => 1
);

对于分页,这应该有效:

while( $post_query->have_posts() ){
    // your code
}
next_posts_link( 'Older Entries', $post_query ->max_num_pages );
previous_posts_link( 'Newer Entries' );

WordPress分页documentation

您可以阅读documentation以获取自定义WordPress查询。

答案 1 :(得分:0)

请使用此代码:

<?php
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => 50
    );

    $post_query = new WP_Query($args);

    if($post_query->have_posts() ) {
        while($post_query->have_posts() ) {
            echo "<tr>";
            $post_query->the_post();
            ?>
            <td><a href="<?php the_permalink() ?>" rel="bookmark" title="Link naar <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
            <?php
            echo "<td>" . get_the_date() . "</td>";
            $category_list = get_the_category_list( ', ' );
            if ( $category_list )
                echo "<td>" . $category_list . "</td>";
            echo "</tr>";
        }
    }
    echo "</table>";

   pagination_nav();
?>

现在在主题的functions.php中定义这个分页功能

function pagination_nav(){
// Don't print empty markup if there's only one page.
if ( $GLOBALS['wp_query']->max_num_pages < 2 ) {
    return;
}

$paged        = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
$pagenum_link = html_entity_decode( get_pagenum_link() );
$query_args   = array();
$url_parts    = explode( '?', $pagenum_link );

if ( isset( $url_parts[1] ) ) {
    wp_parse_str( $url_parts[1], $query_args );
}

$pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';

$format  = $GLOBALS['wp_rewrite']->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
$format .= $GLOBALS['wp_rewrite']->using_permalinks() ? user_trailingslashit( 'page/%#%', 'paged' ) : '?paged=%#%';

// Set up paginated links.
$links = paginate_links( array(
    'base'     => $pagenum_link,
    'format'   => $format,
    'total'    => $GLOBALS['wp_query']->max_num_pages,
    'current'  => $paged,
    'mid_size' => 3,
    'add_args' => array_map( 'urlencode', $query_args ),
    'prev_text' => __( '&larr; Previous', '' ),
    'next_text' => __( 'Next &rarr;', '' ),
    'type'      => 'list',
) );
if ( $links ) :
    echo $links;
endif;
    }