是否从已提交的表单为特定的后期请求生成重写规则?

时间:2010-10-12 作者:chris

我有一个表单(方法帖子),可以根据特定标准筛选我的帖子,例如“最近”、“本周”、“上周”。。。

它工作得很好,但当然每个请求的URL都是相同的。我不想改变发送方法来获取和更改URL。我正在寻找一种解决方案,在其中我可以向现有规则中添加一个重写规则,这样就可以有“动态”URL,如

http://myurl.com/most-recent
http://myurl.com/last-week
http://myurl.com/category-1/most-recent
http://myurl.com/category-1/last-week

查找单词“最近”、“上周”的重写规则。。。在url的末尾,删除这些内容,然后返回到正常的重写规则。因此,这些预先定义的帖子请求将适用于类别、页面、帖子。。。

我希望你们能理解我的意思!

1 个回复
SO网友:John P Bloch

我想这不会太难。假设已知自定义“动态”URL的数量,这应该可以做到:

foreach ( array( \'most-recent\',\'last-week\',\'category-1/most-recent\',\'category-1/last-week\') as $page )
  add_rewrite_rule( "$page/?$", \'index.php\', \'top\' );
这会告诉WordPress“每当您有一个与X匹配的url结构时,请将其视为仅为site.com/index.php的url,并在执行任何其他操作之前检查此规则。”WordPress会将其视为主页,但也会发送$_POST 从表单中获取信息并获取正确的信息。

第一个参数是一个正则表达式,所以遍历每一项可能不是一个坏主意preg_quote() 预先

希望有帮助!

编辑我强烈建议不要在这个操作中使用任何类型的通配符正则表达式。否则,页面将开始与此规则匹配。

出于我们的目的,将这些结构视为具有位置,由/. 例如,在category-1/most-recent, 位置1将是category-1 位置2是most-recent. 因此,对于所有结构,为每个位置创建一个数组,其中包含可能进入该位置的所有字符串。所以你可能会有这样的想法:

$timing = array(
  \'most-recent\',
  \'last-week\',
);
$cats = array(
  \'category-1\',
  \'category-2\',
  \'category-3\'
);
$timing = array_map( \'preg_quote\', $timing );
$timing = implode( \'|\', $timing );
$cats = array_map( \'preg_quote\', $cats );
$cats = implode( \'|\', $cats );
add_rewrite_rule( "($timing)/?$", \'index.php\', \'top\' );
add_rewrite_rule( "($cats)/($timing)/?$", \'index.php\', \'top\' );

结束

相关推荐