Blog sobre desarrollo WordPress en Español Desarrollo WordPress en Español

Haz que la imagen destacada sea obligatoria

Probablemente en alguna ocasión por un descuido u olvido, o quizá por las prisas, no hayas establecido una imagen destacada en un post. Y si no has sido tú, quizá alguno de los autores que puede que tengas en tu blog.

Sea como fuere, en estos casos hubiera estado bien no dejar publicar un post hasta que tenga imagen destacada asociada. O que el campo imagen destacada fuera obligatorio, no dejándote publicar hasta que subieras o establecieras una imagen.

Si el diseño/maquetación de tu página web requiere que muestres la imagen destacada de tus entradas para que no se rompa nada, la solución es hacer que la imagen destacada sea un campo obligatorio a la hora de publicar contenido.

Para conseguirlo añade el siguiente código al functions.php de tu tema o añádelo a tu plugin de utilidades:

function featured_image_required($hook) { if ( 'post.php' != $hook && 'post-new.php' != $hook ) { return; } wp_enqueue_script( 'featured-image-required', get_theme_file_uri('/js/myscript.js') ); } add_action( 'admin_enqueue_scripts', 'featured_image_required' );

Este código lo puedes personalizar para tus post o para el Custom Post Type que necesites. Simplemente añade un archivo JS en la cola de scripts del admin, donde a través de un script de jQuery detectaremos si tú o uno de tus autores ha establecido imagen destacada o no.

Crea un archivo JS y ponlo en la carpeta /js de tu tema. En este archivo tendremos:

jQuery(document).ready(function ($) { $('#post').submit(function() { if ($("#set-post-thumbnail").find('img').size() > 0) { return true; }else{ alert("¡No olvides establecer una imagen destacada!"); return false; } return false; }); });

En el evento submit buscamos si tenemos la etiqueta img dentro del enlace con ID set-post-thumbnail, o lo que es lo mismo, si hemos puesto imagen. En caso afirmativo simplemente devolvemos un true para que guarde y publique el post.

En caso negativo mostramos una alerta en pantalla indicando al usuario que no ha establecido una imagen destacada. Y devolvemos false para cortar el envío del formulario.

 

Evitar publicar un post si no tiene imagen destacada desde el lado del servidor

En el ejemplo anterior hemos visto como evitar publicar un post si no tiene imagen destacada desde el lado de cliente (utilizando JavaScript). Un usuario avanzado podría lograr publicar un post deshabilitando JavaScript desde el navegador o poniendo un valor dummy en la etiqueta img con el inspector de elementos.

Vamos a ver ahora cómo evitarlo desde el lado del servidor. Deberemos añadir en el functions.php o en nuestro plugin de utilidades las siguientes funciones:

function check_featured_image( $post_id ) { // Elegimos los post types sobre los que actuar, en este ejemplo: post if( 'post' != get_post_type( $post_id ) ) { return; } // Comprobamos que queremos publicar el post $post = get_post($post_id); if ('publish' == $post->post_status) { if ( ! has_post_thumbnail( $post_id ) ) { // Creamos un transient para mostrar un mensaje de error set_transient( "has_featured_image", "no" ); // Desactivamos el hook para evitar bucle infinito remove_action( 'save_post', 'check_featured_image' ); // Guardamos la entrada como borrador wp_update_post( array( 'ID' => $post_id, 'post_status' => 'draft' ) ); // Volvemos a activar el hook add_action( 'save_post', 'check_featured_image' ); } else { delete_transient( "has_featured_image" ); } } } add_action( 'save_post', 'check_featured_image' ); function show_message_no_image() { if ( "no" == get_transient( "has_featured_image" ) ) {?> <div id="message" class="error"> <p><strong>Esta entrada no tiene imagen destacada. Añade una antes de publicar</strong></p> </div> <?php delete_transient( "has_featured_image" ); } } add_action( 'admin_notices', 'show_message_no_image' );

Puede que también te interese

Reduce el HTML de tu WordPress para bajar el peso de la página
Reduce el HTML de tu WordPress para bajar el peso de la página
La parte pública de una web o expresado de otro modo, lo que el navegador pinta, no es más que un documento HTML, donde encontraremos…
wp_options: ¿Qué es?, ¿Para qué sirve?, ¿Cómo se puede optimizar?, y ¿Cómo puedo hacer uso de ella?
wp_options: ¿Qué es?, ¿Para qué sirve?, ¿Cómo se puede optimizar?, y ¿Cómo puedo hacer uso de ella?
En este artículo vamos a ver qué es wp_options, para qué sirve y cómo optimizarla eliminando los rastros que van dejando algunos plugins y temas,…
Seguridad WordPress: proteger el acceso a wp-admin
Seguridad WordPress: proteger el acceso a wp-admin
Uno de los objetivos más importantes para cualquier atacante es el acceso al panel de administración o back-end de nuestro WordPress. Debemos aumentar la seguridad…
Mejora la puntuación de Google PageSpeed Insights: Reducir el tiempo de respuesta del servidor
Mejora la puntuación de Google PageSpeed Insights: Reducir el tiempo de respuesta del servidor
1. Optimizar imágenes 2. Minificar CSS y JS 3. Especificar caché de navegador 4. Habilita la compresión 5. Reducir el tiempo de respuesta del servidor…