Фильтр, вызывающий потерю _wp_attachment_metadata

Некоторое время назад я задал этот вопрос: сохранить информацию о камере в качестве метаданных при загрузке изображения?

Короче говоря, он работает в том, что пользовательское поле сохраняется в wp_postmeta, и я могу получить доступ к этому значению. Но когда я пересматриваю проект, я заметил побочный эффект.

При использовании следующего кода для сохранения дополнительных метаданных фотографий, _wp_attachment_metadata больше не сохраняется в базе данных. Это, очевидно, приводит к нескольким проблемам с размерами изображений и редактором изображений в 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); } 

Я не могу понять, почему _wp_attachment_metadata больше не сохраняется с этим фильтром. Кажется, что все выглядит так, как должно, и сам фильтр успешно записывает данные, на которые он предназначен. Удаление фильтра возвращает ожидаемую функциональность (_wp_attachement_metadata правильно сохраняется в БД), поэтому я знаю, что проблема связана с этим фильтром.

Любая помощь будет принята с благодарностью.

Благодарю.

Учитывая, что это фильтр, он должен return $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 } 

Я смог продублировать проблему, которую вы описали, и это небольшое изменение зафиксировало ее.

Это единственный вопрос для фильтров вниз по этой линии, но с фильтрами вы должны (почти) всегда возвращать информацию. Вы никогда не знаете, что сломается, если вы этого не сделаете.