Post taxonomy from exif data

时间:2014-05-08 作者:Andreas Poulsen

每当我发布带有特色图像的帖子时,我都想从该图像中提取exif数据,并将其作为分类的术语附加。我已经有了一个插件,可以提取相关信息,但我不知道何时何地调用wp_set_object_terms

有人能给我指出正确的方向吗?

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

将附件图像EXIF数据检索为“插件”对以后的访问者没有帮助,让我们从如何检索开始:

# Get the post ID: Use one of the following. Preferred is the API function get_the_ID()
# $GLOBALS[\'post\']->ID;
# global $post; $post->ID;
# get_the_ID();
$meta = wp_get_attachment_metadata( get_the_ID(), false );
# Fetch the EXIF data part 
$exif = $meta[\'image_meta\'];
现在,我们将EXIF数据保存到$exif - 为了确保我们没有被图像入侵,在显示(或更好的做法是保存)数据之前,不要忘记对数据进行转义/清理。

# List of EXIF data entries:
$created   = date_i18n( 
    get_option( \'date_format\' ), 
    strtotime( $meta[\'created_timestamp\'] ) 
);
$copyright = filter_var( $meta[\'copyright\'] );
$credit    = filter_var( $meta[\'credit\'] );
$title     = filter_var( $meta[\'title\'] );
$camera    = filter_var( $meta[\'camera\'] );
$shutter   = number_format_i18n( filter_var( 
    $meta[\'shutter_speed\'],
    FILTER_SANITIZE_NUMBER_FLOAT
), 2 );
$iso       = number_format_i18n( filter_var( 
    $meta[\'iso\'], 
    FILTER_SANITIZE_NUMBER_FLOAT 
) );
$focal     = number_format_i18n( filter_var( 
    $meta[\'focal_length\'],
    FILTER_SANITIZE_NUMBER_FLOAT
), 2 );
$aperture  = filter_var( $meta[\'aperture\'] );
将image EXIF meta另存为term这可能(或几乎在所有情况下)会发生在admin中,我们需要使用其中的挂钩:

  • add_attachment (参数:$att_id)
  • edit_attachment (参数:$att_id)
在上传或编辑图像后,两者都会触发。

然后就有了

  • media_send_to_editor (参数:$html, $send_id, $attachment)
  • attachment_fields_to_save (参数:$post, $attachment)
(更多信息请参见this answer)

所以唯一要做的就是

为您的案例选择正确的挂钩提取要添加为术语的EXIF数据wp_set_object_terms() 到所需的分类法,并在附加到上面选择的过滤器或挂钩的回调中发布:

$terms = wp_set_object_terms( 
    get_the_ID(),
    array( $meta[\'copyright\'] ),
    \'your-taxonomy\',
    # Do *append* the new term and not replace all others with it!
    TRUE
);
# DEBUG:
if ( is_wp_error( $terms ) )
    exit( $terms->get_error_message() );

var_dump( $terms ); // should be an array of terms
您应该始终检查返回值(就像我对is_wp_error()) 在处理某些东西时。如果你想表现得好一点,并且这是由于缺少EXIF数据而可能发生错误的地方,那么你也应该跳到那里,并提供一些用户反馈,例如管理员通知。

结束

相关推荐

定义`GET_POST_QUALUALY_Images`的大小,它们似乎已调整为150x150

我正在使用get_post_gallery_images 它可以输出150x150的图像。它看起来不需要大小参数,所以我假设它只会显示最大的图像,或者最好是我定义的一个大小。150x150太小了,有没有地方可以声明我想要多大尺寸的画廊图片?例如,我正在做:<?php $gallery = get_post_gallery_images( $post ); foreach ($gallery as $img) { ?> <li><img src