この質問には、WordPressの背景がたくさんありますが、ここで問題となっているPHP知識の欠如が欲しいと思っています。PHPの正規表現を使用して複数のhref値を置き換える
<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>
です。
これは、一致する各テキストに1つのリンクがある限り、正常に動作します。しかし、2つ以上のリンクがある場合、すべてのリンクが同じ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'を期待している:
しかし、問題は簡単に
preg_replace_callback
機能で解決されますか? – WillardSolutions**正規の質問なしでHTMLの正規表現質問をすることはできません(http://stackoverflow.com/a/1732454/2191572) – MonkeyZeus
@EatPeanutButter基本的には、それぞれのhref '値が追加されました。すべての' href'が更新された後、複数の '$ newstring'を1つのテキストブロックにまとめてまとめることで達成できるかどうかはわかりません。 – kieranstartup