2

假设我在 wordpress 中有一个页面“foo”,这样 http:/www.blah.com/foo 就会显示它。

假设这个页面在其内容中有一个触发器,例如 <!-- foo --!> 我的插件通过 add_filter('the_content', ..) 过滤器跟踪它。因此,所有对 http:www.blah.com/foo 和http://www.blah.com/foo?var=bar的调用都被插件接收并处理。

现在有没有办法让插件知道它想要处理http://www.blah.com/foo/bar http://www.blah.com/foo/bar/类型的所有 url morefoo等。“无需”为每个页面创建页面/子页面,因为这些 url 将被动态创建?

此外,除了在页面内的 the_content 上使用 add_content 过滤器之外,是否还有可以从理想地键入 url 的插件中获取控制权,因此对http://www.blah.com/foo的所有调用都由插件处理。

4

3 回答 3

2

是的,您可以获取 URL 引用(也称为查询)并解析它们,而无需创建子页面。

查询概述页面中描述了事件的顺序。你想特别关注一下这个parse_request动作。

于 2009-01-31T03:40:15.503 回答
2

回答我自己的问题:

上面答案中的指针很有用,让我走上了正确的道路,但我一直遇到一个障碍,每当调用有问题的 url 时,它就会一直调用 index.php。

然后我遇到了http://mikeschinkel.com/blog/restful-web-services-in-wordpress-plugin/ 在那里他进行了解释并提供了一个答案,需要一个 template_redirect 操作来确保控制在你想要的地方.

于 2009-01-31T21:49:11.453 回答
1

我使用自定义 mod_rewrite 规则做了一些与您描述的非常相似的事情。按照您的示例,我有一个使用模板 foo.php 的页面 Foo。foo.php 模板接受一个查询变量,比如“path”,它定义了 URL 的其余部分。在我的 .htaccess 文件中,我有以下规则(小心将其置于WordPress 自动生成的规则之外!):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^foo/(.+) /foo/?path=$1 [L] 
</IfModule>

您的插件可能还需要禁用“redirect_canonical”插件,该插件可能会意外盗取您的 URL。

remove_action('template_redirect', 'redirect_canonical');

我认为也可以使用template_redirect钩子和WP_Rewrite类做类似的事情,但我自己没有尝试过。

于 2009-01-31T03:47:52.320 回答