Você pode impedir que a postagem seja salva junto com pequenos hacks do JQuery e validar os campos antes de salvar no lado do cliente ou no lado do servidor com ajax:
primeiro, adicionamos nosso JavaScript para capturar o evento submit / publish e o usamos para enviar nossa própria função ajax antes do envio real:
add_action('wp_print_scripts','my_publish_admin_hook');
function my_publish_admin_hook(){
if (is_admin()){
?>
<script language="javascript" type="text/javascript">
jQuery(document).ready(function() {
jQuery('#post').submit(function() {
var form_data = jQuery('#post').serializeArray();
form_data = jQuery.param(form_data);
var data = {
action: 'my_pre_submit_validation',
security: '<?php echo wp_create_nonce( 'pre_publish_validation' ); ?>',
form_data: form_data
};
jQuery.post(ajaxurl, data, function(response) {
if (response.indexOf('True') > -1 || response.indexOf('true') > -1 || response === true || response) {
jQuery('#ajax-loading').hide();
jQuery('#publish').removeClass('button-primary-disabled');
return true;
}else{
alert("please correct the following errors: " + response);
jQuery('#ajax-loading').hide();
jQuery('#publish').removeClass('button-primary-disabled');
return false;
}
});
return false;
});
});
</script>
<?php
}
}
então criamos a função para fazer a validação real:
add_action('wp_ajax_my_pre_submit_validation', 'pre_submit_validation');
function pre_submit_validation(){
//simple Security check
check_ajax_referer( 'pre_publish_validation', 'security' );
//do your validation here
//all of the form fields are in $_POST['form_data'] array
//and return true to submit: echo 'true'; die();
//or your error message: echo 'bal bla bla'; die();
}
sempre é possível alterar um pouco para fazer a validação apenas para o tipo de postagem adicionando uma verificação condicional à função my_publish_admin_hook
para o tipo de postagem e para validar no lado do cliente, mas eu prefiro no lado do servidor. / p>