Tornar obrigatório Imagem Destacada nos posts do WordPress

Muitas vezes desenvolvemos temas no WordPress, e precisamos tornar alguns item na hora da publicação do post serem obrigatórias. Um desses itens, poderia ser a imagem destacada, para que o layout não seja quebrado, ou não fuja do fluxo planejado por você anteriormente.

A lógica será, verifica depois salvar ou editar um post, se existe uma imagem destacada, não existindo, colocamos o status do post como pendente

Então, no arquivo functions.php, vamos criar uma função, que faça verificação se existe a imagem destacada. O código estará comentado:

 /**
     * Definimos uma função, que verificar
     * se existe imagem destacada
     *
     */
    function required_image_post($post_id) {
        //Se não for post, ele não continua verificação
        if (get_post_type($post_id) != 'post')
            return;

        /**
         * Se o Status do Post, foi auto-rascunho ou se foi adicionado no lixo
         * ele não continua verificação
         */
        if (in_array(get_post_status($post_id), array('auto-draft', 'trash')))
            return;

        //Verifica se existe o post destacado
        if (!has_post_thumbnail($post_id)) {
            /**
             * Adicionamos uma informação transitória
             * Para depois mostramos a mensagem de alerta
             * para o usuário
             */
            set_transient("is_image_post", "required");
            /**
             * Removemos a função do save_post, para evitar o loop infinito
             * já que vamos usar wp_update_post para alterar o status pra pendente
             */
            remove_action('save_post', 'required_image_post');
            //Modificamos o Post como pendente
            wp_update_post(array('ID' => $post_id, 'post_status' => 'pending'));
            //Adicionamos novamente a função no add_action
            add_action('save_post', 'required_image_post');
        } else {
            //Caso exista, exclui a informação transitória
            delete_transient("has_post_thumbnail");
        }
    }

Agora vamos criar também, a função para exibirá a mensagem para o usuário.

   /**
     * Definimos a função que mostrará a função
     */
    function display_message_post() {
        //Verifica se existe item is_image_post, com valor required
        if (get_transient("is_image_post") == "required") {
            //Existindo, exibe a uma mensagem de erro
            echo "<div id='message' class='error'><p><strong>Imagem Destacada é obrigatória para publicação do Post</strong></p></div>";
            //Depois removemos esse item
            delete_transient("is_image_post");
        }
    }

Agora vamos adicionar essas duas funções pra WordPress poder executá-la. A função required_image_post, será adicionada ao gancho save_post, que será quando for salvo ou editado um post. O display_message_post, será adicionado ao gancho admin_notices.

 add_action('save_post', 'required_image_post');
 add_action('admin_notices', 'display_message_post');

Juntando tudo, ficaria assim (lembrando que será no arquivo functions.php. Ou você pode adicionar dentro do arquivo, ou em arquivo separado, e depois dando include ou require esse arquivo na functions.php):

/**
     * Definimos uma função, que verificar
     * se existe imagem destacada
     *
     */
    function required_image_post($post_id) {
        //Se não for post, ele não continua verificação
        if (get_post_type($post_id) != 'post')
            return;

        /**
         * Se o Status do Post, foi auto rascunho ou for adicionado no link
         * ele não continua verificação
         */
        if (in_array(get_post_status($post_id), array('auto-draft', 'trash')))
            return;

        //Verifica se existe o post destacado
        if (!has_post_thumbnail($post_id)) {
            /**
             * Adicionamos uma informação transitoria
             * Para depois mostramos a mensagem
             * ou não para o usuário
             */
            set_transient("is_image_post", "required");
            /**
             * Removemos ação, para evitar o loop infinito
             * já que vamos usar wp_update_post
             */
            remove_action('save_post', 'required_image_post');
            //Modificamos o Post como pendente
            wp_update_post(array('ID' => $post_id, 'post_status' => 'pending'));
            //Adicionamos novamente a função no add_action
            add_action('save_post', 'required_image_post');
        } else {
            //Caso exista, exclui a informação transitoria
            delete_transient("has_post_thumbnail");
        }
    }

    /**
     * Definimos a função que mostrará a função
     */
    function display_message_post() {
        //Verifica se existe item is_image_post, com valor required
        if (get_transient("is_image_post") == "required") {
            //Existindo, exibe a uma mensagem de erro
            echo "<div id='message' class='error'><p><strong>Imagem Destacada é obrigatória para publicação do Post</strong></p></div>";
            //Depois removemos esse item
            delete_transient("is_image_post");
        }
    }

    add_action('save_post', 'required_image_post');
    add_action('admin_notices', 'display_message_post');

Espero que tenha ajudado. Até a próxima.




Se o conteúdo foi relevante para você, e desejar, você pode incentivar fazendo uma doação.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *