如何自动将php添加到所有链接?

时间:2013-03-19 作者:Ciaran Gaffey

我正在为我的网站使用Qtranslate插件。这是一个非常酷的插件,在一定程度上工作得很好。不过,当用户在所见即所得编辑器中添加指向内部内容的链接时,我遇到了一个问题,因为该链接只会以一种语言输出。我想将一些php自动插入到我的网站所见即所得编辑器中创建的所有内部内容链接中。我想要<?php echo qtrans_getLanguage(); ?> 添加到每个内部链接。

例如,如果在WP中执行以下操作:

<a href="/london">London</a>
我希望输出如下:

<a href="/<?php echo qtrans_getLanguage(); ?>/london/">London</a>
这样,使用所见即所得编辑器插入内容中的任何链接都将自动转发到正确的语言。

还有一个更复杂的问题,这意味着我不希望外部链接添加php。因此,如果链接如下所示:<a href="http://www.google.com/">Google</a>我希望它保持这样。

你知道怎么做吗?我找不到任何其他帖子来解决这样的问题。

1 个回复
SO网友:s_ha_dum

插入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\');
更好,更可靠。与之前一样,这是匆忙组装的,但它确实具有您问题中提到的最低功能。如果没有彻底的测试和调试,我不会把它投入生产。

结束