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.7.2
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; }