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:

[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 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");
}
}
[/php]

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

[php]
/**
* 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");
}
}
[/php]

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.

[php]
add_action(‘save_post’, ‘required_image_post’);
add_action(‘admin_notices’, ‘display_message_post’);
[/php]

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):

[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’);
[/php]

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

Deixe uma resposta

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