【发布时间】:2016-11-04 16:45:05
【问题描述】:
我知道这个问题有更多的 WordPress 背景,但我希望只是我缺乏 PHP 知识是这里的问题。
我有一个查找<a> 标签的正则表达式,例如:<a href="http://website.co.uk/post/post-title">Find Out More</a>,这些标签是从用户输入的内容生成的。一旦找到此内容,foreach 循环就会在匹配的文本上运行,并使用 WordPress 函数 $postId = url_to_postid( $url ); 将 URL 转换为 PostID。
这是一个示例输出:<a href="#171">Find Out More</a>。
只要在每段匹配的文本中有一个链接,就可以正常工作。但是,如果有两个或多个链接,它会将每个链接设置为具有相同的href,这是不正确的。
我确定这与我的循环运行方式有关。我正在使用的代码如下:
<?php
$string = get_field('sample_text_box');
$pattern = "/(?<=href=(\"|'))[^\"']+(?=(\"|'))/";
preg_match_all($pattern, $string, $matches);
$urls = $matches[0];
foreach($urls as $key => $url) {
$postId[$key] = url_to_postid( $url );
}
$newstring = preg_replace($pattern , $postId[$key] , $string);
echo $newstring;
?>
get_field('sample_text_box'); 行是一个高级自定义字段函数,它“返回指定字段的值”。如果有帮助,你可以在这里阅读:https://www.advancedcustomfields.com/resources/get_field/
谢谢!
【问题讨论】:
-
您是否期望在此代码块末尾有多个
$newstring? -
没有 quintessential answer 就不能有 HTML 正则表达式问题
-
@EatPeanutButter 基本上我的目标是更新已添加链接的每个
href值。我不确定您是否可以通过拥有多个$newstring来实现这一目标更新完所有href后,将合并到一个文本块中。
标签: php arrays regex wordpress foreach