Obligar a WordPress a poner una imagen destacada en un POST

imagen destacada wordpress
Artículos

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

De cualquier manera, en estos casos, sería bueno no permitir que se publique un post hasta que tenga una imagen destacada asociada. O que el campo de la imagen destacada sea obligatorio, no permitiéndote publicar hasta que subas o pongas una imagen destacada.

Si el diseño o maquetación del sitio requiere que muestres la imagen destacada de tus posts para que no se rompa nada, la solución es hacer que el campo de la imagen de destaque sea un campo obligatorio al publicar contenido.

Para conseguirlo, añade el siguiente código al functions.php de tu tema o al 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' );

Puedes personalizar este código para tus entradas (post) o para un tipo de entrada personalizado que necesites. Simplemente añade un archivo JS en la cola de scripts del administrador, donde, a través de un script jQuery, detectaremos si tú o uno de tus autores ha puesto una imagen o no.

Cree un archivo JS y colóquelo en la carpeta / js de su 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 caso, simplemente buscamos si tenemos la etiqueta img dentro del enlace con ID set-post-thumbnail, o lo que podría ser lo mismo, si hemos colocado una imagen. Si es así, simplemente devolvemos true para guardar y publicar la entrada.

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

Evite registrar una entrada si no tiene una imagen prominente en el lado del servidor

En el ejemplo anterior, vimos cómo evitar la publicación de un post si no tiene una imagen destacada del lado del cliente (usando JavaScript). Un usuario avanzado puede publicar una entrada desactivando JavaScript en el navegador o poniendo un valor ficticio en la etiqueta img con el inspector de elementos.

Veamos ahora cómo evitarlo en el lado del servidor. Debemos añadir las siguientes funciones en functions.php o en nuestro plugin:

function check_featured_image( $post_id ) {
// establecer el tipo de puesto (CPT)
if( 'post' != get_post_type( $post_id ) ) {
volver;
}

// confirmando la acción de envio
$post = get_post($post_id);

if ('publish' == $post->post_status) {
if ( ! has_post_thumbnail( $post_id ) ) {
// Crear un transitorio para mostrar un mensaje de error
set_transient( "has_featured_image", "no" )

// Desactivar el gancho para evitar el bucle infinito
remove_action( 'save_post', 'check_featured_image' )

// Guardar el post como borrador
wp_update_post( array( 'ID' => $post_id, 'post_status' => 'draft' )

// Activar el gancho de nuevo
add_action( 'save_post', 'check_featured_image' )
} si no {
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="mensaje" class="error">
<p><strong>Este post não possui imagem em destacada. Adicione um antes de postar</strong></p>
</div>

<?php delete_transient( "has_featured_image" );
}
}
add_action( 'admin_notices', 'show_message_no_image' );

Sobre Hugo Calixto

Hugo Calixto¡Hola! Soy Hugo Calixto, Programador WEB y Profesional SEO desde 2017.

Qué hago: Desarrollo sitios personalizados (con o sin Wordpress), administro servidores y soy experto en SEO (optimización de sitios para motores de búsqueda).

Y lo que más me gusta de mi trabajo es: "Ayudar a la gente" y "Probar de todo" y "usar lo que aprendo para poder hacer cosas nuevas".

¡Oh! Si necesitas ayuda, llama a Hugo Calixto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

*