自定义邮寄类型档案中的分页功能

时间:2012-10-03 作者:mathiregister

我有一个用于事件的自定义帖子类型,并使用普通archive.php 模板以列出所有以前的事件。

问题是,我对内部的事件帖子类型使用自定义查询archive.php 像这样…

<?php
            if ( is_post_type_archive(\'wr_event\') ) :
                 get_event_list( false, \'DSC\' );
            else:
                rewind_posts();
                get_template_part( \'inc/posts\' );
            endif;
        ?>
功能get_event_list()

看起来像这样…

function get_event_list( $latest = true, $order = \'ASC\' ) {
    echo \'<ul class="event-items">\';

    $yesterday = time() - 24*60*60;
    $compare = $latest ? \'>\' : \'<\';

    $args = array(
        \'post_type\' => \'wr_event\',
        \'posts_per_page\' => \'posts_per_page\' => is_archive() ? 16 : -1,
        \'meta_key\' => \'event_date\',
        \'orderby\' => \'meta_value_num\',
        \'order\' => $order,
        \'meta_value\' => $yesterday,
        \'meta_compare\' => $compare
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
        get_template_part( \'inc/event\', \'item\' );
    endwhile;
    wp_reset_postdata();
    echo \'</ul>\';
}
我正在使用相同的函数get_event_list() 在我的index.php 要列出所有事件,请在我的索引中列出所有事件。这就是为什么我posts_per_page => -1.

在我的archives.php 在我想使用相同模板的地方,我只想列出16个“事件”,并在下面分页。

我的functions.php 在我的搜索模板中,这确实可以很好地工作。但它不适用于此自定义存档。

function get_pagination_links( $type = \'plain\', $endsize = 1, $midsize = 1 ) {
    global $wp_query, $wp_rewrite;  
    $wp_query->query_vars[\'paged\'] > 1 ? $current = $wp_query->query_vars[\'paged\'] : $current = 1;

    // Sanitize input argument values
    if ( ! in_array( $type, array( \'plain\', \'list\', \'array\' ) ) ) $type = \'plain\';
    $endsize = (int) $endsize;
    $midsize = (int) $midsize;

    // Setup argument array for paginate_links()
    $pagination = array(
        \'base\'          => @add_query_arg(\'paged\',\'%#%\'),
        \'total\'         => $wp_query->max_num_pages,
        \'current\'       => $current,
        \'show_all\'      => false,
        \'end_size\'      => $endsize,
        \'mid_size\'      => $midsize,
        \'type\'          => $type,
        \'prev_next\'     => false
    );

    return paginate_links( $pagination );
}
分页显示在“我的事件”下面,仅列出16个事件。但是,如果我单击第二页,将列出前16个事件的相同列表。

如何使分页与我的自定义帖子类型存档一起工作,有什么想法吗?

2 个回复
SO网友:Tom J Nowell

这里有一个类比可以帮助您:

你有一本书,每页有500个单词,你打开一页书读。然后你把书合上递给我,让我读下一页。Which page?

您已经告诉您的查询您想要什么,以及每个页面您想要多少,但您没有指定要获取哪个页面,因此它将始终获取第1页。

http://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

使用paged 查询变量。

还可以考虑使用pre_get_posts 过滤而不是创建一个全新的查询,这样可以完全避免整个WP\\U查询和分页混乱。

SO网友:Md Toufiqul Islam

功能get_event_list()

应该是这样的…

每当使用自定义查询时,必须在查询中包含分页变量,分页才能正常工作。

分页说明:使用get_query_var(\'page\'); 如果希望查询在已设置为静态首页的页面模板中工作。查询变量\'page\' 还保存单个分页帖子或包含<!--nextpage--> 文章内容中的Quicktag。

重要环节:WP_Query:

function get_event_list( $latest = true, $order = \'ASC\' ) {
    echo \'<ul class="event-items">\';

    global $paged; // paged variable
    $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; // set paged
    $yesterday = time() - 24*60*60;
    $compare = $latest ? \'>\' : \'<\';

    $args = array(
        \'post_type\' => \'wr_event\',
        \'posts_per_page\' => \'posts_per_page\' => is_archive() ? 16 : -1,
        \'meta_key\' => \'event_date\',
        \'orderby\' => \'meta_value_num\',
        \'order\' => $order,
        \'meta_value\' => $yesterday,
        \'meta_compare\' => $compare,
        \'paged\' => $paged           // add paged variable in argument array
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
        get_template_part( \'inc/event\', \'item\' );
    endwhile;
    wp_reset_postdata();
    echo \'</ul>\';
}

结束

相关推荐

Why won't pagination work?

我正在使用带有代码的页面模板来显示所有博客帖子:<?php /* Template Name: Blog */ ?> <?php get_header(); ?> <div id=\"main\"> <?php // ACF Page number variable $numposts = get_field(\'number_of_posts_per_page\'); $args =

自定义邮寄类型档案中的分页功能 - 小码农CODE - 行之有效找到问题解决它

自定义邮寄类型档案中的分页功能

时间:2012-10-03 作者:mathiregister

我有一个用于事件的自定义帖子类型,并使用普通archive.php 模板以列出所有以前的事件。

问题是,我对内部的事件帖子类型使用自定义查询archive.php 像这样…

<?php
            if ( is_post_type_archive(\'wr_event\') ) :
                 get_event_list( false, \'DSC\' );
            else:
                rewind_posts();
                get_template_part( \'inc/posts\' );
            endif;
        ?>
功能get_event_list()

看起来像这样…

function get_event_list( $latest = true, $order = \'ASC\' ) {
    echo \'<ul class="event-items">\';

    $yesterday = time() - 24*60*60;
    $compare = $latest ? \'>\' : \'<\';

    $args = array(
        \'post_type\' => \'wr_event\',
        \'posts_per_page\' => \'posts_per_page\' => is_archive() ? 16 : -1,
        \'meta_key\' => \'event_date\',
        \'orderby\' => \'meta_value_num\',
        \'order\' => $order,
        \'meta_value\' => $yesterday,
        \'meta_compare\' => $compare
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
        get_template_part( \'inc/event\', \'item\' );
    endwhile;
    wp_reset_postdata();
    echo \'</ul>\';
}
我正在使用相同的函数get_event_list() 在我的index.php 要列出所有事件,请在我的索引中列出所有事件。这就是为什么我posts_per_page => -1.

在我的archives.php 在我想使用相同模板的地方,我只想列出16个“事件”,并在下面分页。

我的functions.php 在我的搜索模板中,这确实可以很好地工作。但它不适用于此自定义存档。

function get_pagination_links( $type = \'plain\', $endsize = 1, $midsize = 1 ) {
    global $wp_query, $wp_rewrite;  
    $wp_query->query_vars[\'paged\'] > 1 ? $current = $wp_query->query_vars[\'paged\'] : $current = 1;

    // Sanitize input argument values
    if ( ! in_array( $type, array( \'plain\', \'list\', \'array\' ) ) ) $type = \'plain\';
    $endsize = (int) $endsize;
    $midsize = (int) $midsize;

    // Setup argument array for paginate_links()
    $pagination = array(
        \'base\'          => @add_query_arg(\'paged\',\'%#%\'),
        \'total\'         => $wp_query->max_num_pages,
        \'current\'       => $current,
        \'show_all\'      => false,
        \'end_size\'      => $endsize,
        \'mid_size\'      => $midsize,
        \'type\'          => $type,
        \'prev_next\'     => false
    );

    return paginate_links( $pagination );
}
分页显示在“我的事件”下面,仅列出16个事件。但是,如果我单击第二页,将列出前16个事件的相同列表。

如何使分页与我的自定义帖子类型存档一起工作,有什么想法吗?

2 个回复
SO网友:Tom J Nowell

这里有一个类比可以帮助您:

你有一本书,每页有500个单词,你打开一页书读。然后你把书合上递给我,让我读下一页。Which page?

您已经告诉您的查询您想要什么,以及每个页面您想要多少,但您没有指定要获取哪个页面,因此它将始终获取第1页。

http://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

使用paged 查询变量。

还可以考虑使用pre_get_posts 过滤而不是创建一个全新的查询,这样可以完全避免整个WP\\U查询和分页混乱。

SO网友:Md Toufiqul Islam

功能get_event_list()

应该是这样的…

每当使用自定义查询时,必须在查询中包含分页变量,分页才能正常工作。

分页说明:使用get_query_var(\'page\'); 如果希望查询在已设置为静态首页的页面模板中工作。查询变量\'page\' 还保存单个分页帖子或包含<!--nextpage--> 文章内容中的Quicktag。

重要环节:WP_Query:

function get_event_list( $latest = true, $order = \'ASC\' ) {
    echo \'<ul class="event-items">\';

    global $paged; // paged variable
    $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; // set paged
    $yesterday = time() - 24*60*60;
    $compare = $latest ? \'>\' : \'<\';

    $args = array(
        \'post_type\' => \'wr_event\',
        \'posts_per_page\' => \'posts_per_page\' => is_archive() ? 16 : -1,
        \'meta_key\' => \'event_date\',
        \'orderby\' => \'meta_value_num\',
        \'order\' => $order,
        \'meta_value\' => $yesterday,
        \'meta_compare\' => $compare,
        \'paged\' => $paged           // add paged variable in argument array
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
        get_template_part( \'inc/event\', \'item\' );
    endwhile;
    wp_reset_postdata();
    echo \'</ul>\';
}

相关推荐

Count posts for pagination

我正在为一个网站分页<;上一页(页码)下一页>很简单,已经完成。但是现在我需要添加一个选择器来直接转到页面(例如:转到第7页),要这样做,我需要知道有多少页面,为此我需要计算在查询中找到了多少帖子。问题是这个网站有太多的帖子(>13.000),查询所有帖子都会减慢页面加载速度,这就像。。。10秒后页面才能加载。显然,这是不可接受的。分页解决了这个问题,因为一次只加载50或100篇文章,但我无法将它们全部计算在内。我可以在不加载的情况下统计某个查询中的帖子吗?或者我可以通过其他方式获得页数吗