我想自定义Wordpress默认图库,以便为每个项目设置如下格式:
<dl class="gallery-item imgteaser">
<a rel="lightbox-cats" href="http://mydomain.com/link/to/image.jpg" title="Image caption (if any)" name="image.jpg (image file name)">
<img width="150" height="150" src="http://mydomain.com/link/to/image-150x150.jpg" class="attachment-thumbnail" alt="002" title="002">
</a>
</dl>
基本上我想要链接(
<a>
) 拥有:
rel
用于激活lightbox脚本(由用户在每个库中手动定义为“lightbox猫”)href
链接到图像的直接URL(例如:http://mydomain.com/link/to/image.jpg)title
这是Wordpress图像标题name
这是图像文件名(例如:image.jpg)
我一直试图通过修改从
[here] 和
[here], 但它变得非常混乱,因为我不知道如何移除不必要的东西。
例如,我不需要<a>
链接到附件页(类似于http://mydomain.com/?attachment=20)。我只需要它直接链接到图像URL。
使用筛选器并将其添加到functions.php
, 以下是我到目前为止所做的(非常混乱):http://pastebin。com/Q51W1BVr
我把它放进了pastebin,因为它有点太长(很抱歉,我不能把它作为链接,因为我在这里没有足够的信誉点:/)
虽然我相信修改输出的部分仅来自这里:
$i = 0; // Modified output from here
foreach ( $attachments as $id => $attachment ) {
$link = wp_get_attachment_link($id, $size, true, false);
if( ! empty($rel) ) { !!! // Add rel injection
$link = str_replace(\'<a href=\', "<a rel=\'$rel\' href=" .wp_get_attachment_url( $attachment->ID ). " alt=", $link);
} else {
$link = str_replace(\'<a href=\', "<a rel=\'$rel\' href=", $link);
}
$link = str_replace("title=\'", "title=\'" . wptexturize($attachment->post_excerpt) . "\' name=\'", $link);
$output .= "<{$itemtag} class=\'gallery-item imgteaser\'>
";
$output .= $link;
$output .= "</{$itemtag}>
";
if ( $columns > 0 && ++$i % $columns == 0 )
$output .= \'<br style="clear: both" />\';
}
$output .= "
<br style=\'clear: both;\' />
</div>\\n";
return $output;
}
以下是输出结果的混乱程度:
<dl class="gallery-item imgteaser">
<a rel="lightbox-cats" href="http://localhost/test/wp-content/uploads/2012/09/002.jpg" alt="http://localhost/test/?attachment_id=36" title="" name="002">
<img width="150" height="150" src="http://localhost/test/wp-content/uploads/2012/09/002-150x150.jpg" class="attachment-thumbnail" alt="002" title="002"
</a>
</dl>
这是可行的,但它有不必要的
alt="http://localhost/test/?attachment_id=36"
因为我不知道如何移除它。我觉得我的代码真的不够有效/不干净/
最合适的回答,由SO网友:Webord 整理而成
像WordPress一样,有一个过滤器可以做到这一点,不需要正则表达式,如果有任何更改,它可能会失败。
以下是输出代码:
<?php
add_filter(\'wp_get_attachment_image_attributes\', function($attr, $attachment){
unset($attr[\'alt\']); // Just deleting the alt attr
return $attr;
}, 10, 2);
$url = wp_get_attachment_url( $attachment->ID );
$name = esc_attr( $attachment->post_title );
$title = wptexturize($attachment->post_excerpt);
$text = wp_get_attachment_image( $id, $size, false );
if ( trim( $text ) == \'\' )
$text = $attachment->post_title;
$link = "<a href=\'$url\'" . (!empty($rel)? " rel=\'$rel\'":"") . " title=\'$title\' name=\'$name\'>$text</a>";
速度更快,因为您已经有了
$attachment
对象,以及
wp_get_attachment_link
再次检索它,即使它缓存在内存中,最好不要这样做。
用上面的代码替换代码,不要忘记将add_filter
在循环之前,您确实需要多次创建相同的过滤器。
$link = wp_get_attachment_link($id, $size, true, false);
if( ! empty($rel) ) { // !!! Add rel injection
$link = str_replace(\'<a href=\', "<a rel=\'$rel\' href=" .wp_get_attachment_url( $attachment->ID ). " alt=", $link);
} else {
$link = str_replace(\'<a href=\', "<a rel=\'$rel\' href=", $link);
}
$link = str_replace("title=\'", "title=\'" . wptexturize($attachment->post_excerpt) . "\' name=\'", $link);