Как прикрепить загруженное изображение к посту?

Вопрос: Я пытаюсь прикрепить (добавить) уже загруженное изображение (attachment) к к посту. В wp_postmeta я добавил _wp_attached_file как meta_key и value = productimages/Routers/v/CISCO1941.jpg но это не работает и я не могу увидеть изображение как вложение поста! Но когда я использую кнопку add image в HTML редакторе wordpress, он добавляет точно такое же поле в эту таблицу, но с другим ID поста!

Есть ли какая-нибудь зависимость для этого поля? скриншот из базы данных:

Ответ:

  • Любой файл-вложение - это пост с типом attachment. Подробнее здесь.

  • Любой файл-вложение (attachment) прикрепляется к посту через поле post_parent таблицы wp_posts. В этом поле нужно указать ID поста к которому вы хотите прикрепить вложение.

Таким образом, все что вам нужно сделать - это обновить поле post_parent у вложения - установить в него ID поста:

wp_update_post( [
	'ID' => $attachment_id,
	'post_parent' => $post_id
] );

Или можно это сделать прямым запросом к БД.

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

global $wpdb;

$wpdb->update( $wpdb->posts, [ 'post_parent' => $post_id ], [ 'ID' => $attachment_id ] );

clean_post_cache( $post_id );