导致丢失_wp_附件_元数据的筛选器

时间:2013-05-31 作者:edeneye

不久前,我问了这个问题:Save camera info as metadata on image upload?

长话短说,它的工作原理是将自定义字段保存到wp\\U Posteta中,我可以访问该值。但当我重新审视这个项目时,我注意到了一个副作用。

使用以下代码保存额外的照片元数据后,\\u wp\\u attachment\\u元数据将不再保存到数据库中。这显然会导致WP中的图像大小和图像编辑器出现几个问题:

add_filter( \'wp_generate_attachment_metadata\', \'mvt_save_photo_credit\', 10, 2 );

function mvt_save_photo_credit( $metadata, $attachment_id ) {
    add_post_meta($attachment_id, \'_mvt_credit\', $metadata[\'image_meta\'][\'credit\'], true);
}
我不明白为什么使用此筛选器时不再保存\\u wp\\u attachment\\u元数据。一切似乎都按它应该的方式排列,并且过滤器本身成功地写入了它想要的数据。删除筛选器将返回预期的功能(\\u wp\\u attachement\\u元数据已正确保存到数据库),因此我知道问题与此筛选器有关。

任何帮助都将不胜感激。

谢谢

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

考虑到这是一个过滤器,它应该是returning公司$metadata 而不是什么都不返回。

add_filter( \'wp_generate_attachment_metadata\', \'mvt_save_photo_credit\', 10, 2 );
function mvt_save_photo_credit( $metadata, $attachment_id ) {
    add_post_meta($attachment_id, \'_mvt_credit\', $metadata[\'image_meta\'][\'credit\'], true);
    return $metadata; // <-- giving back what we got
}
我能够复制您描述的问题,而这一小小的改变就解决了它。

这只对这一行下面的过滤器有影响,但使用过滤器时,您应该(几乎)始终返回信息。如果你不这样做,你永远不知道什么会破裂。

结束