set_post_thumbnail()
Устанавливает миниатюру записи по переданным ID записи и ID вложения (медиафайла). Если указанного вложения нет в базе данных, то функция удалит миниатюру записи.
Работает на основе: update_post_meta(), delete_post_meta()
Хуков нет.
Возвращает
int|true|false.
true- Если миниатюра была и данные были обновлены. Или если успешно сработала delete_post_meta().false- если не удалось вставить данные или если указан ID, который и так уже установлен.Число- Только при создании метаполя. ID вставленной строки метаданных (meta_id) - возвращается функцией update_post_meta().
При вставке (не обновлении), возвращаемое значение не "true" при успехе, а "число".
Вернет false при втором запуске. Если изображение уже установлено и вы передаете тот же самый ID вложения. Так происходит, потому что update_post_meta() возвращает false, когда значение не изменилось.
Использование
set_post_thumbnail( $post, $thumbnail_id );
- $post(число/объект) (обязательный)
- ID записи, которой нужно установить миниатюру. Можно передать объект записи.
- $thumbnail_id(число) (обязательный)
- ID вложения которое нужно прикрепить.
Примеры
#1 Автоматическая установка миниатюры записи
Этот код будет автоматически ставить миниатюру записи при сохранении. Если у записи нет миниатюры.
Будет устанавливаться первая прикрепленная к записи картинка.
add_action( 'future_to_publish', 'autoset_featured' );
add_action( 'draft_to_publish', 'autoset_featured' );
add_action( 'new_to_publish', 'autoset_featured' );
add_action( 'pending_to_publish', 'autoset_featured' );
//add_action( 'the_post', 'autoset_featured' );
add_action( 'save_post', 'autoset_featured' );
function autoset_featured() {
global $post;
// check for a post thumbnail
if( has_post_thumbnail( $post->ID ) )
return;
$attached_image = get_children( [
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'image',
'numberposts' => 1,
'order' => 'ASC',
] );
// make a condition to check for a picture
if( $attached_image ){
foreach( $attached_image as $attachment_id => $attachment ){
set_post_thumbnail($post->ID, $attachment_id);
}
}
} #2 Установим миниатюру записи
Допустим нам нужно установить миниатюру записи 56. ID медиафайла (вложения) нам известен и равен 89:
$post_id = 56; $attach_id = 89; $set_thumb = set_post_thumbnail( $post_id, $attach_id ); if( $set_thumb ) echo 'The miniature is set.'; else echo 'The thumbnail has been deleted.';
Список изменений
| С версии 3.1.0 | Введена. |
Код set_post_thumbnail() set post thumbnail WP 6.9.1
function set_post_thumbnail( $post, $thumbnail_id ) {
$post = get_post( $post );
$thumbnail_id = absint( $thumbnail_id );
if ( $post && $thumbnail_id && get_post( $thumbnail_id ) ) {
if ( wp_get_attachment_image( $thumbnail_id, 'thumbnail' ) ) {
return update_post_meta( $post->ID, '_thumbnail_id', $thumbnail_id );
} else {
return delete_post_meta( $post->ID, '_thumbnail_id' );
}
}
return false;
}