En WordPress puedes asignar una imagen destacada por defecto para cada categoría de post utilizando un fragmento de código en el archivo functions.php de tu tema. Este código verifica si un post tiene una imagen destacada asignada; si no la tiene, establece una imagen predeterminada según la categoría del post.

Código para asignar imagen destacada por defecto según la categoría

  1. Abre el archivo functions.php de tu tema (preferiblemente un tema hijo para evitar que se pierdan cambios en futuras actualizaciones).
  2. Añade el siguiente código, reemplazando las URLs de las imágenes por defecto según cada categoría:

function set_default_thumbnail($post_id) {
if (has_post_thumbnail($post_id)) {
return;
}

// Define las imágenes predeterminadas por categoría
$default_images = [
‘categoria-1’ => ‘https://tu-sitio.com/wp-content/uploads/imagen-categoria1.jpg’,
‘categoria-2’ => ‘https://tu-sitio.com/wp-content/uploads/imagen-categoria2.jpg’,
‘categoria-3’ => ‘https://tu-sitio.com/wp-content/uploads/imagen-categoria3.jpg’,
];

// Obtén las categorías del post
$categories = get_the_category($post_id);

// Verifica si hay categorías asignadas y busca una imagen predeterminada
foreach ($categories as $category) {
if (array_key_exists($category->slug, $default_images)) {
$image_url = $default_images[$category->slug];

// Descargar la imagen y establecerla como imagen destacada
$image_id = attach_image_from_url($image_url, $post_id);
if ($image_id) {
set_post_thumbnail($post_id, $image_id);
}
break;
}
}
}
add_action(‘save_post’, ‘set_default_thumbnail’);

// Función para descargar la imagen y adjuntarla al post
function attach_image_from_url($image_url, $post_id) {
$upload_dir = wp_upload_dir();
$image_data = file_get_contents($image_url);
$filename = basename($image_url);

if (wp_mkdir_p($upload_dir[‘path’])) {
$file = $upload_dir[‘path’] . ‘/’ . $filename;
} else {
$file = $upload_dir[‘basedir’] . ‘/’ . $filename;
}

file_put_contents($file, $image_data);

$wp_filetype = wp_check_filetype($filename, null);
$attachment = [
‘post_mime_type’ => $wp_filetype[‘type’],
‘post_title’ => sanitize_file_name($filename),
‘post_content’ => »,
‘post_status’ => ‘inherit’
];

$attach_id = wp_insert_attachment($attachment, $file, $post_id);
require_once(ABSPATH . ‘wp-admin/includes/image.php’);
$attach_data = wp_generate_attachment_metadata($attach_id, $file);
wp_update_attachment_metadata($attach_id, $attach_data);

return $attach_id;
}

Explicación del código

  • $default_images: Define las imágenes predeterminadas para cada categoría. Usa el slug de cada categoría como clave y la URL de la imagen como valor.
  • set_default_thumbnail: Esta función se ejecuta al guardar un post y verifica si tiene una imagen destacada. Si no tiene, busca la primera categoría que tenga una imagen predeterminada en el array $default_images y la establece como imagen destacada.
  • attach_image_from_url: Esta función descarga la imagen de la URL y la adjunta al post como archivo multimedia, generando así una imagen destacada.

Este código asignará automáticamente una imagen destacada por defecto a los posts nuevos (o editados) según su categoría.

Nota: Asegúrate de probar el código en un entorno de desarrollo antes de implementarlo en producción, y reemplaza las URLs de ejemplo con las URLs de las imágenes que quieres usar.