我正在尝试为自定义主页设置重写规则,因为我们计划使用全屏幻灯片和javascript pushstate来更新url,而不是使用正式的WordPress页面。我们决定使用GET变量是最简单的,以便允许链接到主页上的某个幻灯片,但它看起来不太好看,所以我想使用重写规则,以便使一切都流畅且对SEO友好。
下面是我们尝试做的几个例子(“幻灯片”不是WP中的页面/帖子):
Nice URL: example.com/slide/something/
Ugly URL: example.com/?slide=something
Nice URL: example.com/slide/videos/
Ugly URL: example.com/?slide=videos
现在,我们对丑陋的URL没有任何问题,但我的重写规则就是不起作用。关于这一点,我已经回答了几个问题/答案,但没有一个被接受的答案有效。这是我在函数中的内容。php:
add_action(\'init\', \'add_rewrite_rules\');
function add_rewrite_rules() {
flush_rewrite_rules();
add_rewrite_rule(
\'^slide/([^/]*)/?$\',
\'index.php?slide=$matches[1]\',
\'top\'
);
}
我正在刷新重写规则,同时我试图让它工作;我意识到我不应该把它放在那里,如果这是一个生产站点,每次刷新都会被调用。
如果我试着去举例。com/slide/something/I被重定向到主页。
SO网友:Milo
我看到了两个问题-重写规则需要设置查询变量,这将导致主查询成功。设置自定义变量,如slide
不解析WordPress可以加载的任何内容。此外,slide
需要是added to the recognized query vars 以便在规则内对其进行分析。
那么,在主查询中加载首页帖子的规则是什么样的呢?这是一个很好的问题-posts页面是一个特例,没有任何其他查询变量。我还没有找到一条规则来做到这一点,尽管它可能存在。
更简单的方法是使用重写端点:
function wpd_slide_endpoint(){
add_rewrite_endpoint( \'slide\', EP_ROOT );
}
add_action( \'init\', \'wpd_slide_endpoint\' );
请记住,如果您的代码通过
$_GET
, 这仍然行不通,因为WordPress在解析规则时不会将查询变量放在那里。您可以更改代码以使用
get_query_var
, 或者在代码尝试访问它之前分配它:
$_GET[\'slide\'] = get_query_var(\'slide\');