WordPress как на ладони

set_post_thumbnail()WP 3.1.0

Устанавливает миниатюру записи по переданным 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 вложения которое нужно прикрепить.

Примеры

0

#1 Установим миниатюру записи

Допустим нам нужно установить миниатюру записи 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.';
0

#2 Автоматическая установка миниатюры записи

Этот код будет автоматически ставить миниатюру записи при сохранении. Если у записи нет миниатюры.

Будет устанавливаться первая прикрепленная к записи картинка.

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);
		}
	}
}

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

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

Код set_post_thumbnail() WP 6.0.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;
}
3 комментария
    Войти