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.