自定义WordPress默认库输出

时间:2012-09-22 作者:deathlock

我想自定义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" 因为我不知道如何移除它。我觉得我的代码真的不够有效/不干净/

2 个回复
最合适的回答,由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);

SO网友:Michael

有一个完美的简单插件可以更改wordpress gallery主题:https://wordpress.org/plugins/gallery-theme/使用此插件,您还可以为不同的库设置不同的主题!

结束

相关推荐

带有自定义分类的Pagina_Links()

我有一个自定义的分类法,它会列出与之相关的帖子列表。以前-在$posts_args 数组,我设置post_per_page 选项到-1 但是应该添加已实现的分页,以便在每篇文章中显示大量媒体。我读了一遍paginate_links() (并在下面的查询中添加了他们的示例),但到目前为止,还没有根据需要解析出帖子。现在-posts_per_page 设置为2 总的来说WordPress > Reading 设置(有效-页面上仅显示2篇帖子)和paginate_links() 函数调用实际上会根据每页的