插入PHP并不是您真正想要的方式。然后,您需要额外的代码来执行post正文中的PHP。这可能很复杂。
使用上的过滤器更换链接the_content
. 类似这样:
function replace_urls_wpse_91463($matches) {
$ret = \'<a\';
if (isset($matches[1])) {
$ret .= $matches[1];
}
if (isset($matches[2])) {
$home = parse_url(get_home_url());
$url = parse_url($matches[2]);
if (isset($url[\'host\']) && $home[\'host\'] !== $url[\'host\']) {
$link = $matches[2];
}
if (!isset($url[\'host\']) && isset($url[\'path\'])) {
$link = get_home_url(\'\',$url[\'path\']);
}
$ret .= \'href="\'.$link.\'"\';
}
if (isset($matches[3])) {
$ret .= $matches[3];
}
$ret .= \'>\';
if (isset($matches[4])) {
$ret .= $matches[4];
}
$ret .= \'</a>\';
return $ret;
}
function replace_urls_filter_wpse_91463($content){
$content = preg_replace_callback(\'/<a([^>]*)href=(?:"|\\\')([^"\\\']*)(?:"|\\\')([^>]*)>([^<]*)/\',\'replace_urls_wpse_91463\',$content);
return $content;
}
add_filter(\'the_content\',\'replace_urls_filter_wpse_91463\',1000);
我强调
something like that, 因为这是匆忙拼凑起来的,可能会以各种可怕的方式打破。此外,即使在天气好的时候,用regex解析HTML也是相当危险的。享乐对可信赖的没有那么多。我建议选择#2。我相信这会得到很大的改善,但我还是建议您选择#2
创建一个短代码。您的人员进入[url link="/london"]London[/url]
. 类似这样:
function makeurl_sc_wpse_91463($atts,$content) {
extract(shortcode_atts(array(),$atts));
$home = parse_url(get_home_url());
if (!isset($atts[\'link\'])) return;
$link = parse_url($atts[\'link\']);
if (isset($link[\'host\']) && $link[\'host\'] !== $home[\'host\']) {
$link = $atts[\'link\'];
} elseif (isset($link[\'path\'])) {
$link = get_home_url(\'\',$link[\'path\']);
}
$pat = \'<a href="%s">%s</a>\';
return sprintf($pat,$link,$content);
}
add_shortcode(\'url\', \'makeurl_sc_wpse_91463\');
更好,更可靠。与之前一样,这是匆忙组装的,但它确实具有您问题中提到的最低功能。如果没有彻底的测试和调试,我不会把它投入生产。