如何获取要在wp_READ_IMAGE_METADATA()内部使用的图像ID?

时间:2017-02-11 作者:Marko

我想在上传图像时自动将备选文本设置为与帖子标题相同。我发现这个函数很适合设置标题。

对于更新alt文本,我认为我需要使用update_post_meta($image_id, \'_wp_attachment_image_alt\', $post_title); 但如何获取图像id?我如何在这个过滤器中执行var\\u dump()?

/**
 * Add the Media/Image filename to caption, Title
 *
 */
function wpsx_5505_modify_uploaded_file_meta($meta, $file, $sourceImageType) {

    // Get the parent post ID, if there is one
    if( isset($_REQUEST[\'post_id\']) ) {
        $post_id = $_REQUEST[\'post_id\'];
    } else {
        $post_id = false;
    }

    // Only do this if we got the post ID--otherwise they\'re probably in
    //  the media section rather than uploading an image from a post.
    if($post_id && is_numeric($post_id)) {

        // Get the post title
        $post_title = get_the_title($post_id);

        // If we found a title
        if($post_title) {

            $meta[\'caption\'] = $post_title;

        }

    }

    return $meta;

}
add_filter(\'wp_read_image_metadata\', \'wpsx_5505_modify_uploaded_file_meta\', 1, 3);

https://stackoverflow.com/a/39683724/2769517

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

我想在上传图像时自动将备选文本设置为与帖子标题相同。

附件的图像替代文本存储在post meta表中_wp_attachment_image_alt 元键。

在里面media_handle_upload()media_handle_sideload() 我们有:

$id = wp_insert_attachment($attachment, $file, $post_id);
if ( !is_wp_error($id) )
    wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
Thewp_insert_attachment() 是的包装器wp_insert_post() 以及add_attachment 在附件写入posts表后激发。

Example

这里有一种方法可以在上传过程中通过add_attachment 挂钩:

/**
 * Set the attachment image alt as the parent post\'s title, during upload
 */

add_action( \'add_attachment\', function( $attachment_id )
{
    // Nothing to do if it\'s not an image
    if( ! wp_attachment_is_image( $attachment_id ) )
        return;

    // Get parent post\'s ID for the image
    $parent_id = wp_get_post_parent_id( $attachment_id );

    // Nothing to do if the image isn\'t attached to a post
    if( ! $parent_id )
        return;

    // Get parent post\'s title
    $parent_title = get_the_title( $parent_id );

    // Nothing to do if the attached post has no title
    if( empty( $parent_title ) )
        return;

    // Set the image alt as the parent post\'s title
    update_post_meta( $attachment_id, \'_wp_attachment_image_alt\', $parent_title );

} );

Notes

请注意,我们不想添加_wp_attachment_image_alt 所有附件的密钥,所以我们使用wp_attachment_is_image() 仅以图像为目标。

我们还可以wp_update_attachment_metadatawp_generate_attachment_metadata 以类似的方式,附件的ID作为第二个过滤器输入参数传递。

这个wp_read_image_metadata() 在中调用wp_generate_attachment_metadata() 例如,检索EXIF和IPTC数据。这就是OP目前所关注的领域。

还请注意,当父帖子标题更改时,替代文本将不同步。在一个有点相关的问题中,我讨论了一些选项here.

相关推荐

为内置钩子调用do_action和Apply_Filters是否安全?

我正在开发一个插件,它需要复制一些内置的WordPress逻辑。(此逻辑不能用任何内置方法调用,也不能独立连接到。)在这个动作序列中,WordPress的正常行为是调用动作挂钩(do_action(\'wp_login\', ...)) 和过滤器挂钩(apply_filters(\'login_redirect\', ...)).如果在对应于在Core中调用它们的时间点调用它们,那么直接从我的插件调用这些内置钩子是否安全(并且是可以接受的做法)?或者,其他与此相关的开发人员期望在非常特定的时间执行操作的风