内部链接到帖子的永久链接失败,因为邮政编码上有空格和条纹

时间:2013-05-29 作者:user1627363

我写了一个函数,它在文本区域中输出一个标签,人们可以在该区域内链接到网站上的其他帖子。除了使用postname permalink structure...

例如:人们链接到一个名为\'Hello World\' 通过书写(link: Hello World)... 然而,该帖子的链接是:http://somesite.com/hello-world

那么会发生什么呢?我得到一个404错误,因为它看起来好像Hello World不存在,但它确实存在!它和大写字母之间没有条纹。。。我的问题是:如何将其链接到适当的帖子?这是我正在使用的代码:

 $content = preg_replace(\'%\\(link: ?(.*?) ?\\)%\', \'(link: <a href="http://somesite.com/$postname_test" title="$postname_test">$postname_test</a>)\', $content);

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

空格是URL中的无效字符。无论帖子是否存在,也不管你是否需要空格,你的链接都已断开。

大写/小写也会给你带来麻烦。某些服务器区分大小写,因此如果您有永久链接http://somesite.com/hello-world 像这样的链接http://somesite.com/Hello-World 可能有效,也可能无效。你不想让pages在这个案子上翻到404页,对吧?

你的代码内容不足,所以很难测试,但是。。。

$content = "(link: http://example.com/test )"; // assuming links like this
$post= \'Abc Def\'; // and assuming $post is the post title

$content = preg_replace(
  \'%\\(link: ?(.*?) ?\\)%\', 
  \'(link: <a href="http://somesite.com/\'.sanitize_title_with_dashes($post).\'" title="\'.$post.\'">\'.$post.\'</a>)\', 
  $content
);
关于你的代码,我注意到了一些事情。

  1. $post 是WordPress使用的全局变量。您似乎通过将其设置为帖子标题而不是将其保留为帖子对象来对其进行全局搜索。我建议使用不同的变量名title="$post">$post</a>)\' 实际上是title="$post">$post</a>)\'
进一步思考,与其按照您尝试的方式将标题转换为永久链接,不如使用$post->post_name, 具有$post 作为post对象,它应该是。WordPress最初像我那样将标题转换为永久链接,但标题可以独立于永久链接进行编辑。无法保证转换标题会起作用。

事实证明,真正的问题是如何捕获和转换用户提供的输入。为此你需要preg_replace_callback.

function transform_pseudo_anchor_wpse_101201($match) {
  if (isset($match[1])) {
    return \'(link: <a href="http://example.com/\'.sanitize_title_with_dashes($match[1]).\'" title="\'.$match[1].\'">\'.$match[1].\'</a>)\';
  }
}

$content = preg_replace_callback(
  \'%\\(link: ?(.*?) ?\\)%\', 
  \'transform_pseudo_anchor_wpse_101201\', 
  $content
); 
echo $content; 

结束

相关推荐

List repeating share links

我想在我的帖子中添加社交共享按钮,但我不想在我的所有内容文件中添加那么多代码。我想创建一个函数,然后将函数名添加到我的模板文件中,如下所示:function pietergoosen_sosiale_netwerk_deel_knoppies() { <strong>Deel die pos met ander</strong><p </p> <a href=\"http://www.facebook.com/sha