こんにちは私はこの記事でBainternetソリューションから始めました: メタデータフィールドが有効でないならカスタム投稿タイプの投稿を公開しないでください
カテゴリとタグを必須にするためのプラグインを作りました。
検証はうまく機能し、ポップアップは正しく表示されますが、カテゴリとタグが選択されていると投稿は公開されません...何も起こりません。
/* 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();
}
}
JavaScriptの機能はちょっと間違っています、ボタンクリックの代わりにフォーム送信をキャッチすることはこれをそれに変更します:
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>
";
}
}
私はこの記事が古くなっていることを知っています、しかしここにたくさんの異なる投稿要件オプションを持っているNiceプラグインがあります - WyPiekacz