Добавление миниатюры записи при программной вставке поста

5 апр. 2013 г., 20:03:19
Просмотры: 18.5K
Голосов: 5

Я хочу программно вставить запись, вот код для добавления:

global $user_ID;
$new_post = array(
    'post_title' => 'Мой новый пост',
    'post_content' => 'Lorem ipsum dolor sit amet...',
    'post_status' => 'publish',
    'post_date' => date('Y-m-d H:i:s'),
    'post_author' => $user_ID,
    'post_type' => 'post',
    'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);

Как добавить миниатюру записи и протестировать это?

1
Комментарии

Что вы подразумеваете под триггерить это для тестирования?

Sunyatasattva Sunyatasattva
5 апр. 2013 г. 20:33:18
Все ответы на вопрос 3
7

Миниатюра записи сохраняется как метаданные записи с ключом: _thumbnail_id. Таким образом, после вставки записи и получения её ID вы можете установить метаданные для этой записи. $thumbnail_id — это просто ID изображения, которое вы хотите установить в качестве миниатюры, выбор за вами, так как из вашего вопроса неясно, каким оно должно быть.

global $user_ID;
$new_post = array(
    'post_title' => 'Моя новая запись',
    'post_content' => 'Lorem ipsum dolor sit amet...',
    'post_status' => 'publish',
    'post_date' => date('Y-m-d H:i:s'),
    'post_author' => $user_ID,
    'post_type' => 'post',
    'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);

if( ! is_wp_error( $post_id ) )
       update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );
5 апр. 2013 г. 20:45:29
Комментарии

Как я могу протестировать этот код? Если сделать его функцией, то где её следует вызывать?

10wtaylor 10wtaylor
7 апр. 2013 г. 19:25:05

Я не знаю. Я просто хотел дать вам понять, что вы можете обновить метаданные записи после того, как вставите запись.

helgatheviking helgatheviking
7 апр. 2013 г. 21:47:59

Функция миниатюры записи автоматически найдёт любые метаданные, содержащие изображение!

10wtaylor 10wtaylor
9 апр. 2013 г. 12:01:52

Это не то, о чем вы спрашивали. Вы спрашивали, как программно установить миниатюру записи при ее вставке. Это делается путем установки мета-ключа _thumbnail_id для этой записи. Если вы имели в виду что-то другое, пожалуйста, уточните свой вопрос.

helgatheviking helgatheviking
9 апр. 2013 г. 12:23:29

Тогда в чем смысл функции update_post_meta, если функция миниатюры записи не может получить из нее изображение!

10wtaylor 10wtaylor
9 апр. 2013 г. 14:09:03

Что? Мета-ключ _thumbnail_id именно то, что функция the_post_thumbnail() использует для получения ID миниатюры. Вы можете проверить это в файле wp-includes/post-thumbnail-template.php

helgatheviking helgatheviking
9 апр. 2013 г. 14:35:54

Спасибо, Хельга, это именно то, о чем я говорил в предыдущем комментарии.

10wtaylor 10wtaylor
9 апр. 2013 г. 15:39:16
Показать остальные 2 комментариев
0

используйте функцию set_post_thumbnail,

//$file - это путь к загруженному файлу (например, как указано в массиве $_FILE отправленного файла)
//$filename - имя файла
//сначала нам нужно загрузить файл в папку загрузок WordPress
$upload_file = wp_upload_bits($filename, null, @file_get_contents($file));
if(!$upload_file['error']) {
  //если успешно, добавляем новый файл в медиабиблиотеку (создаем новый тип записи "вложение")
  $wp_filetype = wp_check_filetype($filename, null );
  $attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_parent' => $post_id,
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit'
  );
  //wp_insert_attachment( $attachment, $filename, $parent_post_id );
  $attachment_id = wp_insert_attachment( $attachment, $upload_file['file'], $post_id );
  if (!is_wp_error($attachment_id)) {
     //если запись вложения успешно создана, добавляем его как миниатюру к записи $post_id
     require_once(ABSPATH . "wp-admin" . '/includes/image.php');
     //wp_generate_attachment_metadata( $attachment_id, $file ); для изображений
     $attachment_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] );
     wp_update_attachment_metadata( $attachment_id,  $attachment_data );
     set_post_thumbnail( $post_id, $attachment_id );
   }
}
13 июн. 2017 г. 17:34:46
1
-1
$wp_filetype = wp_check_filetype(basename($filename), null);
$wp_upload_dir = wp_upload_dir();
$attachment = array(
   'guid' => $wp_upload_dir['url'] . '/' . basename($filename),
   'post_mime_type' => $wp_filetype['type'],
   'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
   'post_content' => '',
   'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment($attachment, $filename, $post_id);
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata($attach_id, $filename);
wp_update_attachment_metadata($attach_id, $attach_data);

Для получения дополнительной информации смотрите ссылку https://developer.wordpress.org/reference/functions/wp_insert_attachment/

5 апр. 2013 г. 20:43:14
Комментарии

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

Aurovrata Aurovrata
20 янв. 2021 г. 13:16:06