wp_maybe_generate_attachment_metadata()WP 3.9.0

Создает метаданные вложения, если они отсутствуют, в противном случае ничего не делает.

Функция добавит метаданные в метаполя (см. wp_update_attachment_metadata() ), только если:

  • Метаданных еще нет - wp_get_attachment_metadata() ничего не возвращает.
  • Файл физически существует - путь для проверки файла получается через get_attached_file().

Хуков нет.

Возвращает

null. Ничего.

Использование

wp_maybe_generate_attachment_metadata( $attachment );
$attachment(WP_Post) (обязательный)
Объект вложения, метаданные которого нужно сгенерировать.

Примеры

0

#1 Генерация метаданных вложения

Этот пример показывает как создать метаданные для добавленного в медиатеку файла. Предполагается, что метаданные по какой-то причине не были созданы автоматически (обычно они создаются автоматом). Если данные уже существуют (функция wp_get_attachment_metadata() что-либо возвращает), то функция просто ничего не сделает.

$attachment = get_post( 123 );
wp_maybe_generate_attachment_metadata( $attachment );

Список изменений

С версии 3.9.0 Введена.

Код wp_maybe_generate_attachment_metadata() WP 6.5.2

function wp_maybe_generate_attachment_metadata( $attachment ) {
	if ( empty( $attachment ) || empty( $attachment->ID ) ) {
		return;
	}

	$attachment_id = (int) $attachment->ID;
	$file          = get_attached_file( $attachment_id );
	$meta          = wp_get_attachment_metadata( $attachment_id );

	if ( empty( $meta ) && file_exists( $file ) ) {
		$_meta = get_post_meta( $attachment_id );
		$_lock = 'wp_generating_att_' . $attachment_id;

		if ( ! array_key_exists( '_wp_attachment_metadata', $_meta ) && ! get_transient( $_lock ) ) {
			set_transient( $_lock, $file );
			wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) );
			delete_transient( $_lock );
		}
	}
}