WordPress过滤器 - 在一个帖子中添加单独的rel到多个画廊

时间:2013-01-19 13:51:44

标签: php regex wordpress fancybox gallery

我有一个WordPress帖子/页面,我希望有多个画廊。我使用this WordPress plugin来管理多个画廊(它基本上包括每个画廊短代码实例中的选定图像ID)。这将生成以下html,其中包含不同的库,用于单独的库:

<div id="gallery-1">
   <dl class="gallery-item">
    <dt class="gallery-icon">
     <a href="big-image.jpg"><img src="small-img.jpg" /></a>
    </dt>
   </dl>
   <dl> ...another image... </dl>
</div>
<div id="gallery-2">
   <dl class="gallery-item">
    <dt class="gallery-icon">
     <a href="big-image.jpg"><img src="small-img.jpg" /></a>
    </dt>
   </dl>
   <dl> ...another image... </dl>
</div>
...and so on

此外,我还有一个过滤器,可为链接到图像的每个锚点添加rel属性:

function slicetheme_attachment_filter($attachment_link)
{   
    global $post;
    $pattern = "/<a(.*?)href=('|\")([^>]*).(bmp|gif|jpeg|jpg|png)('|\")(.*?)>(.*?)<\/a>/i";
    $replacement = '<a$1rel="fancybox[%LIGHTID%]" href=$2$3.$4$5  $6>$7</a>';
    $attachment_link= preg_replace($pattern, $replacement, $attachment_link);
    $attachment_link = str_replace("%LIGHTID%", $post->ID, $attachment_link);
    return $attachment_link;
}
add_filter('wp_get_attachment_link', 'slicetheme_attachment_filter'); 

我对其进行了修改,因此我通过添加带有帖子ID的rel从每个帖子/页面获得一个库。因此对于ID=553的帖子,我有:

<a rel="fancybox[553]" href="big-image.jpg"><img src="small-img.jpg" /></a>

但这不是我想要的。我希望每个库都有一个不同的rel属性到它的锚点。类似的东西:

<div id="gallery-1">
     <dl class="gallery-item">
      <dt class="gallery-icon">
       <a rel="fancybox-gallery-1" href="big-image.jpg"><img src="small-img.jpg" /></a>
      </dt>
     </dl>
     <dl> ...another image... </dl>
 </div>
 <div id="gallery-2">
     <dl class="gallery-item">
      <dt class="gallery-icon">
       <a rel="fancybox-gallery-2" href="big-image.jpg"><img src="small-img.jpg" /></a>
      </dt>
     </dl>
     <dl> ...another image... </dl>
 </div>

我试图匹配整个事情,但我想我不擅长......

$pattern = "/<div(.*?)id=('|\")gallery-(.*?)('|\")(.*?)<a(.*?)href=('|\")([^>]*).(bmp|gif|jpeg|jpg|png)('|\")(.*?)>(.*?)<\/a>/i";
$replacement = '<div$1id=$2gallery-$3$4$5<a$6rel="fancybox-gallery-$3" href=$7$8.$9$10  $11>$12</a>';

1 个答案:

答案 0 :(得分:1)

您可以复制函数gallery_shortcode(),然后添加apply_filter('gallery_shortcode', 'your_gallery_shortcode_copy')your_gallery_shortcode_copy()函数,并将wp_get_attachment_link()替换为您自己的代码,其中gallery id是静态属性{{1} }。