No hace tanto que vimos un modo sencillo de obligar a los usuarios que definan imagen destacada para las entradas, en aquella ocasión mediante un sencillo pero efectivo plugin.
Hoy vamos a ver cómo lograr lo mismo pero con unas líneas de código.
Y es que lo único que tienes que hacer es añadir el siguiente código a tu plugin de utilidades o al archivo functions.php
del tema activo:
/* Requerir imagen destacada */ add_action('save_post', 'ayudawp_comprobar_miniatura'); add_action('admin_notices', 'ayudawp_error_miniatura'); function ayudawp_comprobar_miniatura($post_id) { // cambia esto para cualquier tipo de contenido personalizado if(get_post_type($post_id) != 'post') return; if ( !has_post_thumbnail( $post_id ) ) { // se muestra un mensaje a los usuarios set_transient( "has_post_thumbnail", "no" ); // desengancha la funcion para evitar un loop infinito remove_action('save_post', 'ayudawp_comprobar_miniatura'); // actualiza la entrada y la pone como borrador wp_update_post(array('ID' => $post_id, 'post_status' => 'draft')); add_action('save_post', 'ayudawp_comprobar_miniatura'); } else { delete_transient( "has_post_thumbnail" ); } } function ayudawp_error_miniatura() { // comprueba si falta la imagen y muestra el mensaje de error if ( get_transient( "has_post_thumbnail" ) == "no" ) { echo "<div id='message' class='error'><p><strong>Debes definir una imagen destacada. Se ha guardado tu entrada pero no puedes publicarla aún.</strong></p></div>"; delete_transient( "has_post_thumbnail" ); } }
El mensaje resultante sería así:
Si lo deseas puedes cambiar el texto a mostrar, el resto funciona solo y de maravilla. Si quieres adaptarlo a algún tipo de contenido personalizado cambia la condición get_post_type
a tu tipo de contenido personalizado.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Hola Fernando,
Muy buen truco pero creo que hay cosas que no terminan de funcionar o al menos a mí, que lo he implementado con alguna variación.
En primer lugar, si un usuario entra directamente a ver todas las entradas, le aparece un borrador automático por defecto, además de aparecerle el error sin ni siquiera guardar nada.
Si intenta eliminarlo, no puede porque le cambia el estado a «draft».
¿Os ha ocurrido esto también a alguno?
(Utilizo la versión recientemente actualizada 3.8.1)
Hola Fernando,
A nosotros nos pasa exactamente lo mismo que comenta Javi Vicente. Nos salen dos borradores nada más entrar en la home.
Además el código tiene otro bug, ya que no solo no permite publicar sin marcar la imagen predefinida sino que tampoco permite borrar el post sin asignarle dicha imagen.
Saludos,
Pues yo lo tengo puesto y no me pasa, me sale el aviso en todo el admin, nada más.
Increíble Fernando!
Justo lo que andaba buscando. Lo pruebo y comento que tal
Creo que ya he detectado de donde provenía el problema del borrador automático.
El problema estaba en el widget del Escritorio, el quick press, que guardaba automáticamente ese borrador. Si estaba deshabilitado por usuario, no lo creaba, igual que si se accedía directamente a la pantalla de edición o crear nueva entrada.
Para solucionarlo, hay que desactivar el widget con este código en functions.php:
function remove_dashboard_widgets() {
global $wp_meta_boxes;
unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_quick_press’]);
}
add_action(‘wp_dashboard_setup’, ‘remove_dashboard_widgets’ );
Gracias por compartir la solución, a mi no me pasaba porque nunca lo tengo activo, lo odio.
Pues si tenía pocas dudas, ahora ya no tengo ninguna. Acabas de confirmarme que si no lo usas y no te pasaba, era de eso.
Gracias a ti crack!
Un abrazo!
Para enviar los artículos sin imagen a la papelera tenéis que sustituir la línea 08 del código de Fernando por:
if ( !has_post_thumbnail( $post_id ) && ‘trash’ != get_post_status( $post_id ) ) {
Muchas gracias Fernando por el artículo.
A tí por el apaño 🙂