自定义PHP页面的WordPress重写规则

u4vypkhs  于 2023-01-29  发布在  PHP
关注(0)|答案(2)|浏览(133)
    • bounty将在4天后过期**。回答此问题可获得+150声望奖励。charlie希望引起更多人关注此问题。

我已经创建了一个PHP页面,我正在使用一个包含插件的WordPress。
因此,当我访问www.example.com时,它显示了包含的PHP文件,该文件工作正常。domain.com/kb it shows me the included PHP file which works fine.
我想使网址漂亮,所以我试着把这个添加到php文件的顶部:

add_rewrite_rule('^kb/([^/]*)/([^/]*)/?','index.php?page_id='.get_the_ID().'&category=$matches[1]&sequence=$matches[2]','top');

但当我访问www.example.com时,它只是删除了123,并留下了domain.com/kb/domain.com/kb/123 is just removes the 123 and leaves domain.com/kb/
最终,我希望能够访问www.example.com,在那里我可以将"123"和"456"作为单独的变量读取。domain.com/kb/123/456 where I can read "123" and "456" as separate variables.

v8wbuo2f

v8wbuo2f1#

add_rewrite_rule函数应该在init action钩子之前被调用,所以你需要把调用add_rewrite_rule的代码移到一个单独的文件中,然后把这个文件包含在你主题的functions.php文件或者插件的主文件中。
在添加新规则后,你也需要刷新重写规则。你可以通过访问WordPress管理区的“永久链接”设置页面,或者在添加新规则后调用flush_rewrite_rules(

tzxcd3kk

tzxcd3kk2#

您正在尝试使用add_rewrite_rule函数为PHP页面创建自定义重写规则,但是存在一些问题:
您尝试在重写规则中使用get_the_ID()函数,但该函数仅在循环中有效,并且不会返回PHP页面的正确页面ID。您需要将其替换为要应用规则的页面的实际ID。
重写规则中使用的$matches数组用于捕获URL中与指定模式相匹配的部分。在您的示例中,您尝试捕获值"123"和"456",但您的模式没有定义任何捕获组。您需要在要捕获的模式部分周围添加括号。
您定义的重写规则未将index.php包括在目标URL中,因此它不会按预期工作。您需要将其包括在内,以便WordPres处理请求。
试试这个:

add_rewrite_rule( '^kb/([^/]+)/([^/]+)/?', 'index.php?page_id=YOUR_PAGE_ID&category=$matches[1]&sequence=$matches[2]', 'top' );

确保将YOUR_PAGE_ID替换为要应用规则的页面的实际ID。添加新规则后,刷新重写规则。

相关问题