В WordPress часто возникает задача программно заменить главную картинку записи (featured image) без использования плагинов. Это может понадобиться, если вы хотите автоматически менять изображение в зависимости от условий или при импорте контента.
Что такое главная картинка записи и зачем ее менять программно
Главная картинка записи хранится как миниатюра (thumbnail) и задается через функцию set_post_thumbnail. Обычно ее устанавливают вручную в админке, но при определенных сценариях нужно делать это автоматически — например, при публикации записи или изменении категории.
Вместо ручной установки через интерфейс, мы можем написать функцию, которая заменит или установит нужную картинку по заданным правилам. Такой подход полезен для кастомных сайтов и при массовой работе с контентом.
Рассмотрим, как реализовать это через файл functions.php вашей темы на примере сайта на домене wpcat.ru.
Функция для замены главной картинки записи в WordPress
Для начала создадим функцию wpcat_set_featured_image, которая принимает ID поста и ID вложения (attachment) — изображения, которое нужно установить.
function wpcat_set_featured_image($post_id, $attachment_id) {
if (!has_post_thumbnail($post_id)) {
set_post_thumbnail($post_id, $attachment_id);
} else {
// Если миниатюра есть, заменяем ее
update_post_meta($post_id, '_thumbnail_id', $attachment_id);
}
}Эта функция проверяет, есть ли у записи миниатюра, и если есть, обновляет ее на новую.
Пример использования функции при сохранении записи
Чтобы автоматически менять картинку при сохранении записи, подключим функцию к хуку save_post:
add_action('save_post', 'wpcat_auto_set_featured_image');
function wpcat_auto_set_featured_image($post_id) {
// Проверяем тип записи
if (get_post_type($post_id) !== 'post') {
return;
}
// Ищем ID вложения по URL или другим параметрам
$image_url = 'https://example.com/wp-content/uploads/2024/05/default-image.jpg';
$attachment_id = wpcat_get_attachment_id_by_url($image_url);
if ($attachment_id) {
wpcat_set_featured_image($post_id, $attachment_id);
}
}В этом примере мы для всех записей типа post устанавливаем картинку по заданному URL, если миниатюры нет.
Функция для получения ID вложения по URL изображения
Часто у нас есть URL изображения, а нужен ID вложения. Для этого используем функцию:
function wpcat_get_attachment_id_by_url($image_url) {
global $wpdb;
$query = $wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE guid=%s", $image_url);
$id = $wpdb->get_var($query);
return $id ? intval($id) : 0;
}Она ищет в базе WordPress attachment с заданным URL и возвращает его ID.
Автоматическая замена главной картинки для записей определенной категории
Иногда нужно менять главную картинку только для записей из конкретных категорий. Это делается через проверку категорий в функции-обработчике.
add_action('save_post', 'wpcat_set_featured_image_by_category');
function wpcat_set_featured_image_by_category($post_id) {
if (get_post_type($post_id) !== 'post') {
return;
}
$categories = wp_get_post_categories($post_id);
$target_cat_id = 5; // ID категории, для которой меняем картинку
if (in_array($target_cat_id, $categories)) {
$image_url = 'https://example.com/wp-content/uploads/2024/05/cat-image.jpg';
$attachment_id = wpcat_get_attachment_id_by_url($image_url);
if ($attachment_id) {
wpcat_set_featured_image($post_id, $attachment_id);
}
}
}Таким образом вы обеспечите автоматическую замену картинки только для записей в нужной категории.
Полезные плагины для работы с миниатюрами и изображениями в WordPress
Если не хотите писать код, можно использовать плагины, которые расширяют возможности работы с изображениями:
- Clearfy Pro — позволяет оптимизировать работу сайта, в том числе управлять миниатюрами и режимами загрузки изображений.
- WPRemark — плагин для расширенного управления контентом и изображениями с возможностью настроек отображения миниатюр.
- WPStories — подходит для создания красивых сторис с картинками, может помочь в работе с визуальной частью контента.
Советы и рекомендации по работе с миниатюрами
При программной замене главной картинки учитывайте следующие моменты:
- Убедитесь, что изображение загружено в медиабиблиотеку и имеет ID вложения.
- Проверяйте наличие миниатюры перед установкой, чтобы не перезаписывать важные изображения без необходимости.
- Если меняете картинки массово, используйте WP-CLI или скрипты, чтобы избежать тормозов сайта.
- Оптимизируйте размеры изображений для быстрой загрузки — плагины Clearfy Pro и другие помогут с этим.
Заключение: адаптация решения под ваши задачи
Приведенные функции — лишь базовый пример. Вы можете расширять логику, например, менять картинки в зависимости от пользовательских полей, даты публикации, тегов и других параметров. Главное — делать все через функции темы (или дочерней темы), чтобы сохранить контроль и избежать конфликтов с плагинами.
Для тех, кто предпочитает код, это отличный способ автоматизировать работу с миниатюрами. Для остальных — всегда можно использовать проверенные плагины с нужным функционалом.