0

ページ上のすべての画像を見つけて、必要に応じてソースを変更する方法を見つけようとしています。これが私がこれまでに持っているものです:

add_filter('the_content','wpdu_image_replace');
function wpdu_image_replace($content) {
    $upload_dir = wp_upload_dir();
    $pattern = '/<img.*src="(.*?)".*?>/';
    $replacement = wpdu_base64_encode_image($upload_dir['path'].'/'.\1);
    return preg_replace( $pattern, $replacement , $content );
}

ただし、次の 3 つの問題があります。

  1. サーバー上の相対パスを使用して「src」タグから始めていますが、次のことを確認するチェックはありません。
    1. 画像はサーバー上に実際に存在します
    2. 画像がそうである場合、URL は相対的に指定されているかどうか
  2. 変数$replacementが間違っています (src タグだけにあるものを出力する方法がわかりません)
  3. 置換でタグを宣言する必要はありません<img>。それを囲む他のすべてのもの (クラス、ID など) が失われるからです。

画像のソースだけを取得して、私が説明している方法でそれを置き換える方法を知っている人はいますか? 代替手段としてSimple HTML DOMを検討しましたが、ひどいパフォーマンス結果が得られました。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

1) サーバー上にイメージが実際に存在するかどうかを確認する

preg_match_all("!(?<=src\=\").+(?=\"(\s|\/\>))!",$html, $match, PREG_SET_ORDER);

$files = $match;
foreach ($files as $file) {
    if (file_exists($file)) {
       echo "The file $file exists";
       //if image exists you can replace it like: 
       $html = str_replace($file, 'NewImagePath', $html);//$file is the found image source
    } else {
       echo "The file $file does not exist";
    }
}

画像を置き換える別の方法:

  $html = '<img id="brandLogo" src="chrome://branding/content/about-logo.png" alt=""/>'
  $html = preg_replace('!(?<=src\=\").+(?=\"(\s|\/\>))!', 'newlogo.png',$html );

このコードはソースを見つけchrome://branding/content/about-logo.pngて新しいものに置き換えますnewlogo.png

2)パスが相対か絶対かを確認するには、php関数を使用できますparse_url

于 2012-07-02T14:52:54.047 に答える