0

非常に画像が多いワードプレスのテーマがあります。画像は、ファイルに直接リンクする必要があるアンカー タグでラップされています。画像のマークアップの例を次に示します。

<a href="Link_to_attachment_page" ><img src="Direct_link_to_file"></a>

必要なのは、次のようにフォーマットすることです。

 <a href="Direct_link_to_file" rel="shadowbox"><img src="Direct_link_to_file"></a>

編集:これを書き終えずに誤って公開しました。

これまでのところ、ページ上の各画像の src を取得して配列に格納する preg_match_all があります。このような:

preg_match_all("/<img .*?(?=src)src=\"([^\"]+)\"/si", $content, $m); 

次に、ループ内で preg_replace を使用して、各アンカー タグの href を配列内の対応する src に変更しました。

for($k = 0; $k <$length; $k++){
   $pattern ="/<a(.*?)href=('|\")(.*?).(bmp|gif|jpeg|jpg|png)('|\")(.*?)>/i";
   $replacement = '<a$1 rel="shadowbox" href="'.$m[1][$k].'"$2$3.$4$5>';
   $content = preg_replace($pattern, $replacement, $content);
   }

これで、href が配列に格納されている値に正常に設定されます。ただし、各 href を同じ画像 (最後の画像) に設定します。だから、私が立ち往生しているところです。今何?

4

1 に答える 1

0

ここで明らかなことを述べているかどうかはわかりませんが、配列の最後に設定する理由を知っていますか? 問題は次の行です。

$content = preg_replace($pattern, $replacement, $content);

ループで呼び出すたびに、すべての href タグが $m[1][$k] の現在の値に置き換えられます。したがって、ループの各反復の最後に、href はすべてループの反復に対応する画像に設定されます。したがって、最終結果には、ループの最後の反復に対応する画像がすべて含まれているのはなぜですか。

可能な解決策:

preg_replace には、1 に設定できる 'limit' パラメータがあり、毎回 1 回だけ置換が行われるようにします。$pattern がすでに置き換えられている href と一致しないようにできれば、問題は解決するはずです。

そうでない場合は、マリオの「preg_replace_callback」ソリューションが機能するはずです。preg_replace_callback 内で置き換えているインスタンスを確認する方法については、次の質問を参照してください

これを知っていれば、$m 配列の適切な要素にアクセスできます。

于 2012-07-29T02:05:26.227 に答える