2016-04-05 19 views
0

Bağlantılı görüntülere bir "fancybox" sınıfı eklemek için bu kodu WordPress tema functions.php'de kullanıyorum. Ancak, , görüntülerini, resim olmayan URL'lere bağlı görüntülere fancybox sınıfı eklemek istemez. Başka bir deyişleBir resme bağlantı oluşturan çapa etiketlerini bulmak için Regex

: Şu anda komut dosyası (ben istemiyorum) böyle bir HTML yapısına "fancybox" sınıfını ekleyecektir:

<a href="http://acme.com/a-non-image-link"> <img src="http://acme.com/image.jpg" /> </a>

nereden sadece sınıf eklemek istediğiniz gibi

<a href="http://acme.com/an-image.jpg"> <img src="http://acme.com/an-image.jpg" /> </a>

veya

<a href="http://acme.com/an-image.jpg"> <img src="http://acme.com/another-image.jpg" /> </a>: gibi yapılara

Nasıl yalnızca, HREF niteliği .jpg, .jpeg, .png veya .gif içeren çapa etiketleri eklemek için bu kodu regex ifadesini değiştirebilir?

Teşekkür ederiz!

 // Add fancybox class to linked images 
     function add_classes_to_linked_images($html) { 
      $classes = 'fancybox fancybox-img'; // can do multiple classes, separate with space 

      $patterns = array(); 
      $replacements = array(); 

      $patterns[0] = '/<a(?![^>]*class)([^>]*)>\s*<img([^>]*)>\s*<\/a>/'; // matches img tag wrapped in anchor tag where anchor tag where anchor has no existing classes 
      $replacements[0] = '<a\1 class="' . $classes . '"><img\2><span class="post-content-fb-btn"></span></a>'; 

      $patterns[1] = '/<a([^>]*)class="([^"]*)"([^>]*)>\s*<img([^>]*)>\s*<\/a>/'; // matches img tag wrapped in anchor tag where anchor has existing classes contained in double quotes 
      $replacements[1] = '<a\1class="' . $classes . ' \2"\3><img\4> <span class="post-content-fb-btn"></span></a>'; 

      $patterns[2] = '/<a([^>]*)class=\'([^\']*)\'([^>]*)>\s*<img([^>]*)>\s*<\/a>/'; // matches img tag wrapped in anchor tag where anchor has existing classes contained in single quotes 
      $replacements[2] = '<a\1class="' . $classes . ' \2"\3><img\4> <span class="post-content-fb-btn"></span></a>'; 

      $html = preg_replace($patterns, $replacements, $html); 

      return $html; 
     } 

     add_filter('the_content', 'add_classes_to_linked_images', 100, 1); 
+1

@see http://stackoverflow.com/a/1732454/3163506 – Scopey

cevap

0

Aşağıdakiler bir uyarı ile çalışmalıdır. Bağlantı, resim etiketine ayrı bir satırda olmalı veya görüntünün dosya uzantısı bir eşleşme oluşturacaktır.

/<a(.*?)href=('|\")(.*?).(bmp|gif|jpeg|jpg|png)('|\")(.*?)>/i 

Belki birisi oldukça iğneleyici yorumlar yayınlayarak daha üzerinde artırabilir :)