Не раз сталкивался с дизайнерами, которые не добросовестно выполняют свои задачи и рисуют макеты в идеальном варианте, не учитывая какой контент будет на сайте. Или же заказчик твёрдо настаивает, что у каждой записи должно быть вводное изображение. Каждый раз искать какое-либо изображение в миниатюру не очень удобно, особенно если графика в записи не нужна.
Для решения данной проблемы можно воспользоваться простым методом — добавление миниатюры по умолчанию. В этой короткой статье мы это и сделаем. Я пользуюсь двумя методами. Первый — костыльный и мне не очень нравится, по этому я рекомендую второй, он более правильный с точки зрения использования WordPress да и с точки зрения красоты кода. И так, поехали.
Способ 1.
Корректировка шаблона выводимых записей. Если вы используете готовую тему для WordPress, то скорее всего в корне темы в найдёте файл loop.php, который является шаблоном записи, выводимой в списке записей (в категории). Именно его вам и следует открыть. Если же вы разрабатываете тему самостоятельно или файл loop.php отсутствует в вашем шаблоне, то вам придётся править каждый шаблон, в котором вы используете цикл вывода записей, это могут быть шаблоны: home.php, single.php, index.php, archive.php и так далее.
Цикл вывода выглядит следующим образом:
|
<?php if (have_posts()) : while (have_posts()) : the_post(); //Начало цикла, если есть записи, то выводим их ?> <h4><?php the_title(); //Заголовок записи ?></h4> <a href="<?php the_permalink() //Ссылка на полную запись ?>"> <?php echo the_post_thumbnail(); //Миниатюра ?> </a> <?php the_content('Читать далее...'); //Сам текст записи ?> <?php the_time('F j, Y'); //Дата публикации ?> <?php endwhile; else: echo '<h2>Извините, ничего не найдено...</h2>'; endif; //конец цикла ?> |
Данный цикл выведет все записи из конкретной категории, если у записей есть миниатюра, то она будет отображена в размере установленном по умолчанию. Если нет, то на месте миниатюры ничего не будет.
Чтобы добавить миниатюру по умолчанию, нужно добавить проверку наличия миниатюры у конкретной записи, если она есть, то вывести, если нет, то вывести какое-то стандартное изображение.
Всё, что вам нужно сделать, это заменить строку:
|
<?php echo the_post_thumbnail(); //Миниатюра ?> |
На следующий код:
|
<?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } else { ?> <img src="путь к вашему изображению" alt="<?php the_title(); ?>" /> <?php } ?> |
В результате вы получите следующий код:
|
<?php if (have_posts()) : while (have_posts()) : the_post(); //Начало цикла, если есть записи, то выводим их ?> <h4><?php the_title(); //Заголовок записи ?></h4> <a href="<?php the_permalink() //Ссылка на полную запись ?>"> <?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } else { ?> <img src="путь к вашему изображению" alt="<?php the_title(); ?>" /> <?php } ?> </a> <?php the_content('Читать далее...'); //Сам текст записи ?> <?php the_time('F j, Y'); //Дата публикации ?> <?php endwhile; else: echo '<h2>Извините, ничего не найдено...</h2>'; endif; //конец цикла ?> |
Готово. Данный цикл выведет записи из указанной категории либо с миниатюрой, добавленной к записи, либо, если таковой нет, с изображением, которое вы укажете.
Это один из двух, способов как можно добавить миниатюру по умолчанию к записи на CMS WordPress, но, как я говорил выше, этот способ я не считаю верным, однако, он имеет место быть так как многие используют именно его. Давайте рассмотрим второй.
Способ 2.
Второй способ заключается в создании своеобразного фильтра для записей. Перед сохранением записи в панели администратора, он будет проверять добавили ли вы миниатюру, и если нет, то добавлять её автоматически.
Для реализации второго метода, вам потребуется отредактировать файл functions.php, расположенный в корне вашей темы. В него, следует добавит следующий код:
|
//Выполняем функцию, указанную ниже add_action( 'save_post', 'set_thumbnail' ); //Сама функция добавления миниатюры function set_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 = '42' ); } } } |
Этот метод немного сложнее чем первый, по этому давай разберём его.
Функция add_action()
регистрирует новое хук-событие. Хук, условно говоря, это функция, которая добавляет фильтр или функцию в WordPress, иначе говоря хук-событие — самое эффективное место, когда можно изменить, проверить или отфильтровать основной запрос WP, сразу после того как он установлен, но до того, как WordPress произведет какие-либо операции связанные с основным запросом.
В нашем случае этот хук регистрирует событие, проще — функцию, фильтрации, которую мы описываем ниже, перед тем как сохранится запись — это мы указываем первым передаваемым в функцию параметром. Думаю с этим разобрались. Поехали дальше.
Объявляемая нами, функция set_thumbnail()
выполняет все необходимые нам операции по проверке и установке миниатюры по умолчанию. Она принимает один параметр — это идентификатор записи.
Функцией get_post_meta
мы получаем информацию о миниатюре, если она существует. Далее проверяем, является ли запись редакцией. Проще говоря, это проверка создаёте ли вы новую запись или редактируете старую. И если это новая запись, то функция работает дальше, если нет, то происходит выход из функции.
Это сделано для того, чтоб наш фильтр не заменял добавленные вручную миниатюры при редактировании записей. Это было бы неприятным сюрпризом, обнаружить, что при каждой редакции записи необходимо устанавливать миниатюру заново.
Дальше всё просто — мы проверяем существует ли миниатюра у данной записи, то есть добавили ли мы её, и если нет, то добавляем. В функцию update_post_meta
в качестве третьего параметра $meta_value
следую передать идентификатор изображения, которое вы предварительно добавили в медиа файлы в панели администратора WordPress. В моём случае, необходимое мне, изображение имело идентификатор 42, у вас наверняка будет другой.
Просмотреть идентификатор изображения можно в панели администратора WordPress. необходимо перейти в раздел «Медиафайлы» -> «Библиотека», выбрать необходимое вам изображение и посмотреть его идентификатор в адресной строке браузера.
Идентификатор изображения
После проделанных операций, зайдите в панель администрирования и добавьте новую запись, вы увидите, что после сохранения записи к ней автоматически добавилась миниатюра. Таким не сложным образом можно реализовать автоматически подставляемую миниатюру по умолчанию в WordPress.
Буду рад замечаниям в комментариях. Читайте мой блог, комментируйте, делитесь с друзьями и пишите код, всем удачной разработки.
comments powered by HyperComments