使用图像标题和描述覆盖图像标题
这里有一种使用演示插件使用图像标题和图像描述覆盖标题的方法。
假设我们已上载此图像:
然后,我们使用以下内容将其插入编辑器:
[caption id="attachment_123" align="aligncenter" width="300"]
<a href="https://example.tld/2017/03/01/hello-world/espresso/"
rel="attachment wp-att-123">
<img src="https://example.tld/wp-content/uploads/2017/03/espresso-300x180.jpg"
alt="" width="300" height="180" class="size-medium wp-image-123" />
</a> espresso caption
[/caption]
Before:
如果插件未激活,它将显示为:
After:
激活插件后,将显示:
希望有帮助!
演示插件:
我们使用过滤器
img_caption_shortcode
和
shortcode_atts_caption
.
这里,我们将其包装到一个类中,以便在过滤器回调之间传递附件id。
<?php
/**
* Plugin Name: Modified Image Caption
* Description: Override The Image Caption With Image Title And Description
* Plugin URI: http://wordpress.stackexchange.com/a/258612/26350
*/
namespace WPSE\\Q258586;
add_action( \'init\', [ new Caption, \'init\' ] );
class Caption
{
private $attachment_id ;
public function init()
{
add_filter( \'img_caption_shortcode\', [ $this, \'shortcode\' ], 999, 3 );
add_filter( \'shortcode_atts_caption\', [ $this, \'atts\' ], 999, 3 );
}
public function shortcode( $output, $attr, $content )
{
if( isset( $attr[\'id\'] ) && preg_match( \'/attachment_\\d+/i\', $attr[\'id\' ] ) )
$this->attachment_id = str_replace( \'attachment_\', \'\', $attr[\'id\'] );
return $output;
}
public function atts( $atts, $pair )
{
if( ! $this->attachment_id )
return $atts;
$img = get_post( $this->attachment_id );
if( is_a( $img, \'\\WP_Post\' ) )
{
$atts[\'caption\'] = sprintf(
\'<span class="title-css">%s</span>
<br><span class="description-css">%s</span>\',
esc_html( $img->post_title ),
esc_html( $img->post_content )
);
}
$this->id = null;
return $atts;
}
}