如何使所有图库图像在新窗口中打开?

时间:2012-05-02 作者:Mario

如何使所有库图像在新窗口中打开高分辨率图像?

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

(2012年5月4日更新:包括标题)

让我们从一个解决方案开始…

没有过滤器,特别是对于画廊图像链接。gallery短代码输出也没有过滤器。所以我们必须伪造一个:

add_action( \'after_setup_theme\', \'wpse_50911_replace_img_shortcodes\' );

/**
 * Replace the default shortcode handlers.
 *
 * @return void
 */
function wpse_50911_replace_img_shortcodes()
{
    remove_shortcode( \'gallery\', \'gallery_shortcode\' );
    add_shortcode( \'gallery\', \'wpse_50911_gallery_shortcode\' );

    remove_shortcode( \'caption\', \'img_caption_shortcode\' );
    remove_shortcode( \'wp_caption\', \'img_caption_shortcode\' );
    add_shortcode( \'caption\', \'wpse_50911_caption_shortcode\' );
    add_shortcode( \'wp_caption\', \'wpse_50911_caption_shortcode\' );
}
它的作用:它替换默认的短代码处理程序[gallery], [caption][wp_caption]. 现在我们必须编写替换函数。这其实很简单,因为我们让WordPress(几乎)完成所有工作:

/**
 * Add the new attribute to the gallery.
 *
 * @param  array $attr Shortcode attributes
 * @return string
 */
function wpse_50911_gallery_shortcode( $attr )
{
    // Let WordPress create the regular gallery …
    $gallery = gallery_shortcode( $attr );
    // … and add the target attribute to all links.
    $gallery = str_replace( \'<a \', \'<a target="_blank" \', $gallery );

    return $gallery;
}

/**
 * Add the new attribute to the caption.
 *
 * @param  array  $attr    Shortcode attributes
 * @param  string $content Caption text
 * @return string
 */
function wpse_50911_caption_shortcode( $attr, $content = NULL )
{
    $caption = img_caption_shortcode( $attr, $content );
    $caption = str_replace( \'<a \', \'<a target="_blank" \', $caption );
    return $caption;
}
它的作用:它将短代码工作委托给原生WordPress函数。然后它获取输出并插入属性target="_blank". 然后将输出返回到页面。

完成。插入图库或标题时,请确保链接指向文件URI,而不是附件页。

注意事项新窗口将打断后退按钮。这对屏幕阅读器或某些移动设备的用户来说是非常恼人的不要使用此代码……除非你被迫花费大量资金来执行此代码。

SO网友:kaiser

迟交的答复

这里有一个稍微“改进/缩短”的@toscho代码版本

插件并不是说我很喜欢这个想法,我只是喜欢links_add_target() 作用

<?php
/* Plugin Name: (#50911) Open gallery img in new window/tab */

add_action( \'after_setup_theme\', \'wpse50911_replace_img_shortcodes\' );
function wpse50911_replace_img_shortcodes()
{
    remove_shortcode( \'gallery\', \'gallery_shortcode\' );
    add_shortcode( \'gallery\', \'wpse50911_gallery_shortcode\' );

    remove_shortcode( \'caption\', \'img_caption_shortcode\' );
    add_shortcode( \'caption\', \'wpse50911_caption_shortcode\' );

    remove_shortcode( \'wp_caption\', \'img_caption_shortcode\' );
    add_shortcode( \'wp_caption\', \'wpse50911_caption_shortcode\' );
}
function wpse50911_gallery_shortcode( $attr )
{
    return links_add_target( gallery_shortcode( $attr ) );
}
function wpse50911_caption_shortcode( $attr, $content = null)
{
    return img_caption_shortcode( $attr, links_add_target( $content ) );
}

结束

相关推荐

CURRENT_SHORTCODE()-检测当前使用的短码

在插件类中,我想为公共数据提供简单的字段:电子邮件、电话号码、Twitter等。该列表可以扩展。看到了吗plugin Public Contact Data 有关详细信息,请访问GitHub。为了保持使用简单,我还想提供易于键入的短代码:[public_email][public_phone][public_something]</唯一的区别是第二部分。我不想对短代码进行进一步的讨论,因为它们容易出错。所以我注册了one 插件类中所有字段的快捷码处理程序:foreach ( $this->fi