对木材路线使用分页

时间:2017-08-01 作者:Alan Shortis

我使用Timber来开发WordPress主题,并使用Routing来允许我根据字段名称和值(使用高级自定义字段添加)过滤帖子存档。

我的路由如下所示:

<?php

Routes::map(\'items/:field/:value\', function($params) {

  $query = array(
    \'post_type\' => \'item\',
    \'meta_key\' => $params[\'field\'],
    \'meta_value\' => $params[\'value\']
  );

  Routes::load(\'archive-item.php\', $params, $query);
});
。。。我的档案如下所示:

<?php

global $params;

$context = Timber::get_context();
$context[\'items\'] = Timber::get_posts();
$context[\'params\'] = $params;

Timber::render(\'item/archive.twig\', $context);
这正如我所希望的那样——如果我在URL中添加两个参数(字段名和值),我会得到与查询匹配的帖子。

我的问题是:我想添加分页,但我不知道如何添加。

如果我添加/page/:page_no 如果URL中不包含这些参数,那么路由将为我提供404。这些参数是否可以以某种方式标记为可选/page/x 将位于URL上,没有其他参数Timber::get_pagination() 似乎与我的路由冲突(反之亦然),给了我404个错误我找不到任何文档来解决这个问题。有办法吗?

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

经过一番胡闹(并正确查看文档!)我已经解决了这个问题。在我的路由中,我只需要添加另一个映射来处理自定义路由的分页:

Routes::map(\'items/browse/:field/:value\', function($params) {
  $query = array(
    \'post_type\' => \'item\',
    \'meta_key\' => $params[\'field\'],
    \'meta_value\' => $params[\'value\']
  );
  Routes::load(\'archive-item.php\', $params, $query);
});


Routes::map(\'items/browse/:field/:value/page/:page\', function($params) {
  $query = array(
    \'post_type\' => \'item\',
    \'meta_key\' => $params[\'field\'],
    \'meta_value\' => $params[\'value\'],
    \'paged\' => $params[\'page\']
  );
  Routes::load(\'archive-item.php\', $params, $query);
});

结束

相关推荐

Pagination issue

我正在使用一个自定义帖子类型/自定义分类组合,我似乎无法使分页正常工作。我想在页面上添加一个无限卷轴,但我甚至无法显示分页以使无限卷轴工作。下面是我的循环:<?php $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; $args = array( \'post_type\' => \'shows\', // it\'s defa

对木材路线使用分页 - 小码农CODE - 行之有效找到问题解决它

对木材路线使用分页

时间:2017-08-01 作者:Alan Shortis

我使用Timber来开发WordPress主题,并使用Routing来允许我根据字段名称和值(使用高级自定义字段添加)过滤帖子存档。

我的路由如下所示:

<?php

Routes::map(\'items/:field/:value\', function($params) {

  $query = array(
    \'post_type\' => \'item\',
    \'meta_key\' => $params[\'field\'],
    \'meta_value\' => $params[\'value\']
  );

  Routes::load(\'archive-item.php\', $params, $query);
});
。。。我的档案如下所示:

<?php

global $params;

$context = Timber::get_context();
$context[\'items\'] = Timber::get_posts();
$context[\'params\'] = $params;

Timber::render(\'item/archive.twig\', $context);
这正如我所希望的那样——如果我在URL中添加两个参数(字段名和值),我会得到与查询匹配的帖子。

我的问题是:我想添加分页,但我不知道如何添加。

如果我添加/page/:page_no 如果URL中不包含这些参数,那么路由将为我提供404。这些参数是否可以以某种方式标记为可选/page/x 将位于URL上,没有其他参数Timber::get_pagination() 似乎与我的路由冲突(反之亦然),给了我404个错误我找不到任何文档来解决这个问题。有办法吗?

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

经过一番胡闹(并正确查看文档!)我已经解决了这个问题。在我的路由中,我只需要添加另一个映射来处理自定义路由的分页:

Routes::map(\'items/browse/:field/:value\', function($params) {
  $query = array(
    \'post_type\' => \'item\',
    \'meta_key\' => $params[\'field\'],
    \'meta_value\' => $params[\'value\']
  );
  Routes::load(\'archive-item.php\', $params, $query);
});


Routes::map(\'items/browse/:field/:value/page/:page\', function($params) {
  $query = array(
    \'post_type\' => \'item\',
    \'meta_key\' => $params[\'field\'],
    \'meta_value\' => $params[\'value\'],
    \'paged\' => $params[\'page\']
  );
  Routes::load(\'archive-item.php\', $params, $query);
});

相关推荐

Count posts for pagination

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