开发一个插件,创建短代码嵌入页面。
我将永久链接设置为“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中更新了永久链接。
最合适的回答,由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示例所示。:)