我使用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个错误我找不到任何文档来解决这个问题。有办法吗?
最合适的回答,由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);
});