31587


WordPressを使っています。投稿（記事ページなど）内にある1つめのimgタグをdivで囲いたいので以下のようなコードを書いてみましたがどうにこもうにも動きません。どのようにすればいいでしょうか。

[code]

    function firstimg_add_divtag($content){
        global $post, $posts;
        $first_img = '';
        ob_start();
        ob_end_clean();
        $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
        $first_img = $matches [1] [0];
    
      $content = preg_replace($first_img , '<div><img alt=""${1}></div>', $content);
      return $content;
    }
    add_filter('the_content', 'firstimg_add_divtag');
    
[/code]

お手数ですがご教授のほどよろしくお願いします。

_参考リンク_  
<http://kotori-blog.com/wordpress/entry_first_img/>  
<http://nelog.jp/no-alt-fix>


CC BY-SA 3.0
2017-01-03T04:54:47.730
31582
2017-01-03T10:41:32.307
2017-01-03T05:02:55.043
20084
20084
question
php html css wordpress
WordPress 投稿の1つめのimgタグをdivで囲いたい


おそらくこちらの関数はimgのsrc部分だけを抽出するものだとおもいます。  
ですので$first_imgには画像のパスが入っていると思います。

テーマファイルで関数を呼び出す際にdivを付けてしまったほうが  
てっとり早い気もします。

呼び出す側のテーマファイルに↓

[code]

    <div><img src="<?php echo firstimg_add_divtag(); ?>" /></div>
    
[/code]

もし頑張って正規表現をやってみるなら  
正規表現の部分を変えればいけると思います。


CC BY-SA 3.0
2017-01-03T10:13:00.850
31586
2017-01-03T10:13:00.850
19992
31582
answer


単純に置換するだけなので

[code]

    add_filter( 'the_content', function ( $content ) {
        $content = preg_replace( '/<img[^>]*>/iu', '<div>$0</div>', $content, 1 );
    
        return $content;
    }, 20 );
    
[/code]

でいいのではないでしょうか。


CC BY-SA 3.0
2017-01-03T10:41:32.307
31587
2017-01-03T10:41:32.307
2376
31582
answer