如何从插件中的URL获取“扩展”路径信息

时间:2019-05-06 作者:Craig Jacobs

开发一个插件,创建短代码嵌入页面。

我将永久链接设置为“Post name”,所以http://example.com/post-name/

我希望能够在URL中传递其他信息,以便短代码可以使用它,例如:http://example.com/foo-page/bar-thing/而不是?名称=值

在我们的开发服务器上,这是可行的,我可以执行以下操作来获得价值:

$url = home_url( $wp->request );
$page_id = $post->post_name;
$thing_pos = strpos( $url, "/" . $page_id );
$thing = substr( $url, $pos + strlen( $page_id ) + 2 );
$thing现在等于“bar thing”;

然而,在某些服务器上,我会收到一条“找不到该页面”的消息。(页面id正确)我已经比较了设置,在永久链接设置等方面找不到任何差异。

所有服务器都在运行5.1.1

我肯定我遗漏了一些明显的东西,但我已经搜索了几个小时,找不到任何有关这方面的信息-我可能没有使用正确的搜索词。

任何帮助都将不胜感激。

Update 1

我已将以下代码添加到我的插件php中:

function custom_rewrite() {
    add_rewrite_tag(
        \'%myid%\',
        \'([^/]+)\'
    );
    add_rewrite_rule(
        \'^category/([^/]+)/?\',
        \'index.php?pagename=mypage&myid=$matches[1]\',
        \'top\'
    );
}
add_action( \'init\', \'custom_rewrite\' );
当我进入“我的页面”时,页面名称后面的任何内容都会显示404,如下所示:http://example.com/mypage/foo. http://example.com/mypage 工作正常,插件加载并执行。

Update 2

这件事做了一整天,还是没能成功。当前代码:

在函数中。php

add_filter(\'query_vars\', \'add_query_vars\', 10, 1);
add_action(\'init\', \'add_rewrite_rules\');
function add_query_vars($vars) {
    $vars[] = "test"; 
    return $vars;
}
function add_rewrite_rules() {
    add_rewrite_rule(\'^category/([0-9]+)/?\', \'category?test=$1\', \'top\');
}
在插件中:

$test = get_query_var( \'test\' );
当我转到此URL时,如下所示:http://example.com/category?test=123 正如预期的那样,我在测试中得到123美元。当我去http://example.com/category/123 我得到一个错误404。我已经在wp admin中更新了永久链接。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

回复“Update 1“:

代码对我来说很有效。所以

当我转到“我的页面”时,页面名称后面的任何内容都会显示404,如下所示:http://example.com/mypage/foo.

因为你的正则表达式模式是^category/([^/]+)/?, 因此,您应该访问的URL是http://example.com/category/foo. 但是,你不应该使用category 因为“base”用于分类归档permalinks—除非你把它改成topics.

所以你会使用^mypage/([^/]+)/? 而不是^category/([^/]+)/?.

但是,您应该知道,重写规则将与作为mypage 页一、 e.如果foo 是的孩子mypage, 然后mypage/foo 将加载mypage 页面而非子页面foo

回复“Update 2“:

当我去http://example.com/category/123 我得到一个错误404。

因为WordPress将请求/URL视为类别存档请求,所以WordPress尝试加载带有123 如果找不到,错误404 被抛出。但是$test (即。get_query_var( \'test\' )) 会给你一个期望值123 如上面的URL示例所示。:)

相关推荐

Altered Media Library URLs

我有一个客户的网站,是在他们离开另一家代理机构后我找到的。该机构使用了一个专有主题和自己的自托管页面生成器,以防止其在除他们之外的任何其他托管环境中更新或编辑。它的另一个方面是重新映射主题的URL并上载目录。因此,例如,代替WP在中查找主题文件http://domain.com/wp-content/themes/…. 它在里面找他们http://domain.com/t/….同样,对于图像上载,也可以在http://domain.com/wp-content/uploads/…, 它在里面找他们http