调整单个帖子图像下方的标题

时间:2017-03-02 作者:Hans Wernersen

首先,我必须道歉,我的php技能不足以解决这个问题。所以我希望有人能在这件事上帮助我。

我正在尝试调整单贴图片下面的图片标题。我想显示图像标题(post\\u title)和图像描述(post\\u content),而不是显示标题(post\\u摘录)。我通过以下代码获得了我想要的东西:

add_shortcode(\'wp_caption\', \'img_caption_add_description\');
add_shortcode(\'caption\', \'img_caption_add_description\');
function img_caption_add_description($attr, $content = null)
{
$post_id = str_replace(\'attachment_\', \'\', $attr[\'id\']);
$img = get_post((int)$post_id);

if (is_a($img, \'WP_Post\')) {
    $image_title = $img->post_title;
    $image_content = $img->post_content;
    $attr[\'caption\'] = \'<span class="title-css">\' . $image_title . \'</span><br><span class="description-css">\' . $image_content . \'</span>\';
}

return img_caption_shortcode($attr, $content);
}
显然,标题和描述仅添加到标题中,如下所示:Screenshot

如何用图像标题和描述替换标题,从而只显示标题和描述?

编辑器中的标题快捷码如下所示:

[caption id="attachment_214" align="alignleft" width="999"]
<img class="size-full wp-image-214"
    src="https://www.[...]/wp-content/uploads/2017/02/geierlay-2.jpg"
    alt="Alt Geierlay" width="999" height="749" />
 Bechriftung Test[/caption]

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

使用图像标题和描述覆盖图像标题

这里有一种使用演示插件使用图像标题和图像描述覆盖标题的方法。

假设我们已上载此图像:

espresso

然后,我们使用以下内容将其插入编辑器:

[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:

如果插件未激活,它将显示为:

before

After:

激活插件后,将显示:

after

希望有帮助!

演示插件:

我们使用过滤器img_caption_shortcodeshortcode_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;
    }
}

相关推荐

Remove <p></p> after images

我对<p></p> 出现在my之后的标记<img....>. 以下是我在本地主机上查看生成的页面时显示的内容。。。<img src=\"/wp-content/themes/wunderful/assets/images/feedback-danielle.png\" alt=\"Danielle Johnson Deal Town FC Treasurer\"> <p></p> 请注意随机生成的<p>&