如何显示图像元数据?

时间:2015-05-14 作者:Rich

我正在尝试将筛选器添加到the_content 将在帖子中查找所有图像并附加自定义附件元数据credit 对它。

以下是我的功能:

Adds the Credit field to attachment details page: (这很有效)

function attachment_field_credit( $field, $post ) {
    $field[ \'credit\' ] = array(
        \'label\' => \'Credit\',
        \'input\' => \'text\',
        \'value\' => get_post_meta( $post->ID, \'credit\', true ),
    );
    return $field;
}
Saves the Credit field: (这很有效)

function attachment_field_credit_save( $post, $attachment ) {
    if( isset( $attachment[ \'credit\' ] ) )
        update_post_meta( $post[ \'ID\' ], \'credit\', $attachment[ \'credit\' ] );
    return $post;
}
Search the content for all available images: (这很有效)

function find_images( $content ) {
    return preg_replace_callback( \'/(<\\s*img[^>]+)(src\\s*=\\s*"[^"]+")([^>]+>)/i\', array( $this, \'attach_image_credit\' ), $content );
}
Appends credit metadata to each image: (这不起作用)

function attach_image_credit( $images ) {
    global $post;
    $credit = get_post_meta( $post->ID, \'credit\', true );
    $replacement = $images[0] . $credit;
    return $replacement;
}
如果我更换$credit 具有的值<span>Hello World!</span> 文本将按预期显示在页面上。我的方式一定有问题get_the_meta 的值credit.

<小时>

UPDATE

如果我手动更换:

get_post_meta( $post->ID, \'credit\', true );
使用:

get_post_meta( 446, \'credit\', true );
它起作用了!所以我需要做的就是找出一种获取附件ID的方法。

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

因为信用数据保存在附件的post meta中,而不是主post中:

$credit = get_post_meta( $post->ID /* Wrong ID! */, \'credit\', true );
相反,您需要捕获插入图像的ID:

function attach_image_credit( $images ) {
    $return = $images[0];

    // Get the image ID from the unique class added by insert to editor: "wp-image-ID"
    if ( preg_match( \'/wp-image-([0-9]+)/\', $return, $match ) ) {
        if ( $credit = get_post_meta( $match[1] /* Captured image ID */, \'credit\', true ) )
            $return .= $credit;
    }

    return $return;
}

结束

相关推荐

当返回值为空时,Apply_Filters为什么要返回非空字符串?

因为这个把我的键盘弄坏了。进行了正确的安装,将数据库上载到新的MySQL,并一直在正确使用子主题。但有件事困扰着我,我想不出来。在我的新安装上(ver2.whowhatwhy.com) 我故意将一些小部件留空。我想,当阅读default-widgets.php wp中的文件包括在该小部件上不会显示标题元素。相反,显示标题小部件是因为,出于某种原因,传递的值apply_filters 是一个空格,而不是空白值$instance[\'title\'] 为空。$title = apply_filters( \'