我想这不会太难。假设已知自定义“动态”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\' );