Imagem destacada WordPress: Tornar obrigatória em um POST

Tornar a imagem em destaque obrigatória em um POST

Provavelmente em alguma ocasião devido ao descuido ou esquecimento, ou talvez por causa da pressa, você não estabeleceu Imagem destacada em seu WordPress para um post. E se não foi você, talvez um dos autores que você possa ter no seu blog.

Seja como for, nesses casos, seria bom não permitir que uma postagem seja publicada até que ela tenha uma imagem destacada associada. Ou que o campo de imagem em destaque seja obrigatório, não permitindo que você publicasse até você fazer upload ou estabelecer uma imagem como destaque.

Se o design / layout do seu site exigir que você mostre a imagem destacada de suas postagens para que nada seja quebrado, a solução é tornar o campo imagem destacada um campo obrigatório ao publicar o conteúdo.

Para conseguir isso, adicione o código a seguir no functions.php do seu tema ou no plug-in de utilitários:

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' );

Você pode personalizar esse código para suas postagens (post) ou para um post type personalizado necessário. Simplesmente adicione um arquivo JS na fila de scripts de administração, onde, através de um script jQuery, detectaremos se você ou um de seus autores estabeleceu uma imagem em destaque ou não.

Crie um arquivo JS e coloque-o na pasta / js do seu tema. Neste arquivo teremos:

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;
    });
});

No evento, simplesmente pesquisamos se temos a tag img dentro do link com ID set-post-thumbnail, ou o que pode ser o mesmo, se tivermos colocado uma imagem. Nesse caso, simplesmente retornamos true para salvar e publicar a postagem.

Caso contrário, exibimos um alerta na tela indicando ao usuário que eles não estabeleceram uma imagem em destaque. E retornamos false para cortar o envio do formulário.

Evite registrar uma postagem se ela não tiver uma imagem de destaque do lado do servidor

No exemplo anterior, vimos como evitar a publicação de uma postagem se ela não tiver uma imagem destacada do lado do cliente (usando JavaScript). Um usuário avançado pode publicar uma postagem desabilitando o JavaScript no navegador ou colocando um valor fictício na tag img com o inspetor de elemento.

Vamos agora ver como evitá-lo do lado do servidor. Nós devemos adicionar as seguintes códigos/funções no functions.php ou no nosso plugin de funcionalidade:

function check_featured_image( $post_id ) {
// definindo o tipo de postagem (CPT)
if( 'post' != get_post_type( $post_id ) ) {
return;
}

// Confirmando a ação de envio
$post = get_post($post_id);

if ('publish' == $post->post_status) {
if ( ! has_post_thumbnail( $post_id ) ) {
// Criamos um transient para exibir uma mensagem de erro
set_transient( "has_featured_image", "no" );

// Desativamos o hook para evitar loop infinito
remove_action( 'save_post', 'check_featured_image' );

// Salvamos o post como rascunho
wp_update_post( array( 'ID' => $post_id, 'post_status' => 'draft' ) );

// Ativamos o hook novamente
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>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 CalixtoOlá! Sou Hugo Calixto, Programador WEB e Profissional de SEO desde 2017.

Sou natural do Rio de Janeiro e vivo em São Paulo e Madrid.

O que faço: Desenvolvo Sites Personalizados (com ou sem Wordpress), Administro Servidores e sou Especialista em SEO (otimização de sites para mecanismos de busca).

E o que mais gosto no meu trabalho é : "Ajudar as pessoas" e "Experimentar de tudo" e "usar o que aprendo para poder fazer coisas novas".

Ah! Se precisar de ajuda, não excite, chama o Hugo Calixto.