我是否可以使用字幕快捷码将字幕设置为数据属性,并且图像的对齐方式保持不变?

时间:2013-01-14 作者:Jodi Warren

我想以这种格式输出图像标题:

<img class="alignleft size-medium wp-image-316" alt="Image Title" data-caption="Here lies the image caption" src="http://example.com/wp-content/uploads/image-400x266.jpg" width="400" height="266">
我得到了the basic caption code from WP Core 并通过add_filter( \'img_caption_shortcode\', \'my_magic_caption\'); 过滤器,似乎工作正常。

我的问题是我似乎不能真正影响($content) IMG标记本身,只使用其他html围绕它,这很好,但不是我想要的。

如有任何指导,将不胜感激。

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

基本上img_caption_shortcode 过滤器允许您完全替换默认图像标题。如果要这样做,需要让WP将过滤器的所有参数传递给回调函数。

<?php
add_filter(\'img_caption_shortcode\', \'wpse81532_caption\', 10, 3 /* three args */);
然后回调将需要处理所有渲染。您可以复制WP的代码,并对其进行修改以满足您的需要。WordPress已经负责从图像HTML中提取标题本身,因此您无需担心这一点。

<?php
function wpse81532_caption($na, $atts, $content)
{
    extract(shortcode_atts(array(
        \'id\'    => \'\',
        \'align\' => \'alignnone\',
        \'width\' => \'\',
        \'caption\' => \'\'
    ), $atts));

    if (1 > (int) $width || empty($caption)) {
        return $content;
    }

    // add the data attribute
    $res = str_replace(\'<img\', \'<img data-caption="\' . esc_attr($caption) . \'"\', $content);

    // the next bit is more tricky: we need to append our align class to the 
    // already exists classes on the image.
    $class = \'class=\';
    $cls_pos = stripos($res, $class);

    if ($cls_pos === false) {
        $res = str_replace(\'<img\', \'<img class="\' . esc_attr($align) . \'"\', $res);
    } else {
        $res = substr_replace($res, esc_attr($align) . \' \', $cls_pos + strlen($class) + 1, 0);
    }

    return $res;
}
这是上面的as a plugin.

SO网友:M-R

可以使用字符串替换函数添加数据标题属性。

function my_custom_img_caption_shortcode( $a , $attr, $content = null) {
    // New-style shortcode with the caption inside the shortcode with the link and image tags.
    if ( ! isset( $attr[\'caption\'] ) ) {
        if ( preg_match( \'#((?:<a [^>]+>\\s*)?<img [^>]+>(?:\\s*</a>)?)(.*)#is\', $content, $matches ) ) {
            $content = $matches[1];
            $attr[\'caption\'] = trim( $matches[2] );
        }
    }

    extract(shortcode_atts(array(
        \'id\'    => \'\',
        \'align\' => \'alignnone\',
        \'width\' => \'\',
        \'caption\' => \'\'
    ), $attr));

    if ( 1 > (int) $width || empty($caption) )
        return $content;

       $image = do_shortcode( $content );
       return str_replace(\'<img\', \'<img data-caption="\'.$caption.\'" style="width: \' . (10 + (int) $width) . \'px"\', $image);
}
add_filter(\'img_caption_shortcode\', \'my_custom_img_caption_shortcode\',10,3);

结束

相关推荐

Admin sidebar customization

我的新客户wordpress站点在管理侧栏中没有插件、外观或任何其他默认项。谁能告诉我这些是怎么出现的吗。该站点正在主站点的子目录中运行。它有自己的wordpress安装。主题是前面的rttheme16。提前谢谢。