Дизайн та розробка сайту

Миниатюра по умолчанию, если заданной нет – WordPress

no image

Доброго времени суток 🙂

Недавно столкнулся с задачей от заказчика по поводу миниатюр. Была поставлена задача - чтобы на главной, в архивах и тд. где в цикле выводятся записи по порядку рядом стояла всегда миниатюра, даже если ее не установил автор статьи. Я предложил вариант с подхватом первого изображения из записи как это делают большинство владельцев WordPress, но заказчик отказался, мотивируя тем, что некоторые авторы пишут такие статьи где изображения они не всегда ставят, а ему хочется видеть именно с миниатюрами. Дополнительным условием еще стало то, что если стоит миниатюра по умолчанию в списке, то при переходе в саму запись, ее не было, просто текст, а если установлена автором,то она выводится с текстом. Вот такой вот поворот 🙂 Кстати сделав новую тему для своего сайта, я применил этот же способ.

no image

Есть два способа решения задачи, но один соответствует только первому условию. Он выводится везде и в списке и в записи, поэтому немного не подходил мне. Но я приведу его тоже, возможно кому-то он пригодится 🙂

1. Способ №1

Данный способ мне не подошел.
Для начала, в библиотеку изображений добавляем картинку которая будет использоваться по умолчанию. В админ части слева выбираем - Медиафайлы - Библиотека - Добавить новый.

После, открываем файл functions.php и в самый конец вставляем код приведенный ниже.

<?php
add_action('save_post', 'my_template_thumbnail');
 
function my_template_thumbnail($post_id) {
$post_thumbnail = get_post_meta($post_id, $key = '_thumbnail_id', $single = true);
  if ( !wp_is_post_revision($post_id) ) :
    if ( empty($post_thumbnail) ) {
      update_post_meta($post_id, $meta_key = '_thumbnail_id', $meta_value = '888');
    }
  endif;
}
?>

Данный код использует хук, который называется save_post, который получает данные о мета-поле миниатюры и проверяет пустое ли оно. Если оно оказывается пустым, то есть миниатюра не была задана, наш хук обновляет это поле и прописывает ID нужного нам изображения, того которое мы добавили ранее.
Цифра 888 в коде и есть ID. Вы должны поменять этот ID на свой. Чтобы узнать ID нужно в библиотеке нажать на нужное изображение и вверху в адресной строке к ссылке допишется путь, конец которого цифра, которая и есть ID. Например ?item=888. Также может внизу браузера высветится поле с ссылкой в которой будет нужный Вам ID.

После этого сохраните и проверьте результат. Результатом должно быть добавление нужного изображения во все посты без миниатюры.
P.S. Если способ не сработал, попробуйте внимательно посмотреть тот ли ID Вы добавили или воспользоваться вторым способом.

2. Способ №2

Берем нужное изображение, называем его к примеру noimages.jpg. Потом вкидываем его в папку с темой, а именно в папку images.
Далее, открываем functions.php добавляем в его конец данную функцию.

<?php
function no_image() {
if ( has_post_thumbnail() ):
  the_post_thumbnail();
else:
  print '<img class="wp-post-image" src="'. get_bloginfo('template_directory'). '/images/noimages.jpg' . '" width="180" height="180" alt="no image" />';
endif;	
}	
?>

Тут вообще все просто, обычное "ЕСЛИ". Проверяем наличие миниатюры, если есть выводим, иначе - берем нужный файл с нашей папки.
Функция выводит обычный тег img в котором прописаны ширина и высота - 180px. Конечно же вы можете поменять на нужный Вам размер. или убрать его вообще.

Далее в нужном файле где выводится цикл - это index.php, content.php, archive.php, category.php и тд, это зависит от Вашей темы WordPress, вставляем следующий код, который вызывает нашу функцию

<?php no_image() ?>

Можете вставить и single.php, тогда миниатюра выведется и в записи. Я этого не делал, так как суть задачи я описал выше.

С помощью вот такой не хитрой штуки мы и справились с поставленной задачей, теперь можете не переживать о том, что где-то будет не хватать миниатюры.Можно поставить нейтральную картинку, а можно что-то и по веселее 🙂

На этом все, спасибо за внимание 🙂

Дизайн та розробка сайту

Back to top