让我们从您的第一个代码开始。如果添加文本、标题等,将生成一个短代码:[caption]
功能img_caption_shortcode()
在wp内容/媒体中。php负责执行短代码。但只有在使用字幕时,才会生成此短代码。否则,只需插入<a>
- 和<img>
-标签
谁来决定,插入什么
添加媒体文件后,会发生一个有趣的ajax请求:
send-attachment-to-editor
. 它发送所有数据,如“图像大小”、“url”、“html”。。。
功能wp_ajax_send_attachment_to_editor()
可以在wp admin/includes/ajax actions中找到。此ajax请求调用php。此函数用于将图像附加到帖子。对我们来说更有趣的是:这个函数创建HTML,它将发布在编辑器中。因此,这里决定[caption]
短代码或简单<img>
-将使用标签。
过滤介质\\u send\\u to\\u editor自wp_ajax_send_attachment_to_editor()
使用筛选器media_send_to_editor
让我们有机会修改此代码。给出了三个参数:-当前HTML输出-附件ID-信息、图像大小、对齐。。。
举个例子:
add_filter( \'media_send_to_editor\', \'test_media\', 10, 3 );
function test_media( $html, $id, $attachment ){
return \'<a href="http://example.com">TEST</a>\';
}
这将始终打印链接
http://example.com/我希望这对你有帮助。
要想现在接收输出,我建议您使用“更好的”短代码:
<?php
add_filter( \'media_send_to_editor\', \'use_always_caption\', 10, 3 );
function use_always_caption( $html, $id, $attachment ){
$post = get_post( $id );
//Return if its not an image
if ( \'image\' != substr( $post->post_mime_type, 0, 5 ) )
return $html;
$rel = \'\';
$url = isset( $attachment[\'url\'] ) ? $attachment[\'url\'] : \'\';
if ( strpos( $url, \'attachment_id\') || get_attachment_link( $id ) == $url )
$rel = \' rel="attachment"\';
$align = isset( $attachment[\'align\'] ) ? $attachment[\'align\'] : \'none\';
$size = isset( $attachment[\'image-size\'] ) ? $attachment[\'image-size\'] : \'medium\';
$alt = isset( $attachment[\'image_alt\'] ) ? $attachment[\'image_alt\'] : \'\';
$caption = \' \';
if( isset( $attachment[\'post_excerpt\'] ) && ! empty( $attachment[\'post_excerpt\'] ) )
$caption = $attachment[\'post_excerpt\'];
$title = \'\'; // We no longer insert title tags into <img> tags, as they are redundant.
add_filter( \'get_image_tag\', \'remove_id_from_class_and_hw\', 10, 6 );
$html = get_image_send_to_editor( $id, $caption, $title, $align, $url, (bool) $rel, $size, $alt );
remove_filter( \'get_image_tag\', \'remove_id_from_class_and_hw\', 10, 6 );
$html = preg_replace( \'^toremove--width="(.*)"--toremove^\', \'\', $html );
return $html;
}
function remove_id_from_class_and_hw( $html, $id, $alt, $title, $align, $size ){
list( $img_src, $width, $height ) = image_downsize( $id, $size );
$class = \'align\' . esc_attr( $align ) .\' size-\' . esc_attr( $size );
return \'<img src="\' . esc_attr( $img_src ) . \'" alt="\' . esc_attr( $alt ) . \'" \' . $title . \' class="\' . $class . \'" toremove--width="\' . $width . \'" height="\' . $height . \'"--toremove />\';
}
remove_shortcode( \'caption\' );
add_shortcode( \'caption\', \'better_img_caption_shortcode\' );
function better_img_caption_shortcode( $attr, $content = null ){
if ( ! isset( $attr[\'caption\'] ) ) {
if ( preg_match( \'#((?:<a [^>]+>\\s*)?<img [^>]+>(?:\\s*</a>)?)(.*)#is\', $content, $matches ) ) {
$content = $matches[1];
$attr[\'caption\'] = trim( $matches[2] );
}
}
$output = apply_filters( \'img_caption_shortcode\', \'\', $attr, $content );
if ( $output != \'\' )
return $output;
$atts = shortcode_atts( array(
\'id\' => \'\',
\'align\' => \'alignnone\',
\'width\' => \'\',
\'caption\' => \'\',
\'class\' => \'\',
), $attr, \'caption\' );
$atts[\'width\'] = (int) $atts[\'width\'];
if ( $atts[\'width\'] < 1 )
return $content;
$class = trim( \'wp-caption \' . $atts[\'align\'] . \' \' . $atts[\'class\'] );
$figcaption = \'\';
if( ! empty( $atts[\'caption\'] ) )
$figcaption = \'<figcaption class="wp-caption-text">\' . $atts[\'caption\'] . \'</figcaption>\';
return \'<figure class="\' . esc_attr( $class ) . \'">\'
. do_shortcode( $content ) . $figcaption . \'</figure>\';
}
?>
我复制粘贴了一点:)
那么,我要做的是:使用过滤器media_send_to_editor
我强制WordPress始终使用[caption]
-短代码。我们使用过滤器稍微改变了图像输出get_image_tag
函数使用的get_image_tag()
要创建<img>
-标签此功能可在wp include/media中找到。php。因为我不想创建整个短代码,而让WordPress来做,所以我需要保留宽度和高度(我想你无论如何都应该保留它),因为字幕创建是由image_add_caption()
(可在wp admin/includes/media.php中找到)需要字符串中的这些值。我加了一个丑陋的toremove--
以后再移除它。
在第二步中,我删除现有[caption]
-快捷编码并用我自己的代码覆盖它。我自己的基本相同,但我删除了ID和Style属性。我坚持[caption]
-短代码,因此一旦用户禁用插件,图片仍将以合理的方式显示。
文件: