Wordpress add_rewrite_rule:带子域的自定义帖子类型链接

时间:2016-03-25 10:47:58

标签: regex wordpress mod-rewrite url-rewriting

我创建了一个自定义帖子类型,对于这个自定义帖子类型,我有像这样的sigle页面 http://example.com/?custom_post=titlehere

如何将此url(使用add_rewrite_rule)重写为

之类的链接

http://titlehere.example.com

到目前为止,我有这段代码

function custom_rewrite_basic() {
  add_rewrite_rule('^http://[\w.-]+\.example.com?', 'custom_post=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');

我写的正则表达式错了吗?

1 个答案:

答案 0 :(得分:1)

是的,如果您查看This Demo,可以看到//带有下划线。这是因为它们没有被转义。应该像\/\/一样选择它们。

以下是您应该使用的RegEx:

^http:\/\/[\w.-]+\.example.com?

Live Demo on RegExr

此外,我不确定您是否要选择?,因为目前它会m com中的\?可选,但如果您这样做,则需要将其转义为,^http:\/\/[\w.-]+\.example.com\/\? 。但是,这将选择http://foo.example.com?something,如果您要选择http://foo.example.com/?something,请使用以下RegEx:

$matches[1]

请注意,使用上面指定的任何RegEx可能仍然无效。 function custom_rewrite_basic() { add_rewrite_rule('^http:\/\/([\w.-]+)\.example.com\/?', 'custom_post=$matches[1]', 'top'); } add_action('init', 'custom_rewrite_basic'); 选择RegEx中的第一个匹配项,但是您没有捕获组。我建议使用以下完整代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="https://www.gumtree.com/" />
<title>gumtree</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">gumtree</td></tr>
</thead><tbody>
<tr>
 <td>open</td>
 <td>https://my.gumtree.com/postad</td>
 <td></td>
</tr>
<tr>
 <td>click</td>
 <td> *** what do I put in here to choose "For Sale"? *** </td>
 <td></td>
</tr>
<tr>
 <td>click</td>
 <td> *** what do I put in here to choose "House Clearance"? *** </td>
 <td></td>
</tr>
<tr>
 <td>click</td>
 <td>id=continueButton</td>
 <td></td>
</tr>
</tbody></table>
</body>
</html>