Bonjour, je suis parti de la solution Bainternet dans cet article: ne publie pas d'article de type article personnalisé si un champ de métadonnées n'est pas valide
J'ai créé un plugin pour créer des catégories et des tags.
La validation fonctionne très bien et la fenêtre contextuelle s'affiche correctement, mais lorsque les catégories et les balises sont sélectionnées, la publication n'est pas publiée ... il ne se passe rien.
/* set category and tag as required fields */
add_action('admin_head','my_publish_admin_hook');
function my_publish_admin_hook(){
if(is_admin())
{
echo"
<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: '";echo wp_create_nonce( 'pre_publish_validation' ); echo"',
form_data: form_data
};
jQuery.post(ajaxurl, data, function(response) {
if (response=='true') {
jQuery('#ajax-loading').hide();
jQuery('#publish').removeClass('button-primary-disabled');
return true;
}else{
alert('Correggi i seguenti errori: ' + response);
jQuery('#ajax-loading').hide();
jQuery('#publish').removeClass('button-primary-disabled');
return false;
}
});
return false;
});
});
</script>
";
}
}
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' );
$error=null;
/* check categories */
$post_data=str_replace("%5D","]",$_POST['form_data']);
$post_data=str_replace("%5B","[",$post_data);
$post_data=substr($post_data,strpos($post_data,"&post_category")+18);
$post_data=substr($post_data,0,strpos($post_data,"&newcategory"));
$categories_array=array();
if(strlen($post_data)>0)
{
$categories_array=explode("&post_category[]=",$post_data);
}
if(count($categories_array)>0)
{
// categories setted
}
else $error="you must select categories";
/* check tag */
$post_data=str_replace("%2C",",",$_POST['form_data']);
$post_data=str_replace("%5D","]", $post_data);
$post_data=str_replace("%5B","[",$post_data);
$post_data=substr($post_data,strpos($post_data,"tax_input[post_tag]=")+20);
$post_data=substr($post_data,0,strpos($post_data,"&"));
if(strlen($post_data)==0) $error="you must select tags";
//print validation response
if($error==null)
{
echo'true';
die();
}
else
{
echo $error;
die();
}
}
La fonction JavaScript est un peu fausse, sa capture du formulaire de soumission au lieu du clic de bouton le change en ceci:
function my_publish_admin_hook(){
if(is_admin())
{
echo"
<script language=\"javascript\" type=\"text/javascript\">
jQuery(document).ready(function() {
jQuery('#publish').click(function() {
var form_data = jQuery('#post').serializeArray();
form_data = jQuery.param(form_data);
var data = {
action: 'my_pre_submit_validation',
security: '";echo wp_create_nonce( 'pre_publish_validation' ); echo"',
form_data: form_data
};
jQuery.post(ajaxurl, data, function(response) {
if (response=='true') {
jQuery('#ajax-loading').hide();
jQuery('#publish').removeClass('button-primary-disabled');
jQuery('#post').submit();
}else{
alert('Correggi i seguenti errori: ' + response);
jQuery('#ajax-loading').hide();
jQuery('#publish').removeClass('button-primary-disabled');
return false;
}
});
return false;
});
});
</script>
";
}
}
Je sais que ce message est ancien, mais voici un plugin de Nice qui propose une multitude d'options de publication - WyPiekacz