Faça categorias e tags necessárias no admin

4

Olá, eu iniciei a partir da solução da Bainternet neste post: não publica postagem de tipo de postagem personalizada se um campo de metadados não for válido

Eu fiz um plugin para tornar categorias e tags necessárias.

A validação funciona bem e o pop-up aparece corretamente, mas quando o categorias e tags são selecionadas, a postagem não é publicada ... simplesmente nada acontece.

/* 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();
   }
}
    
por Mike 01.09.2011 / 12:56

2 respostas

2

A função JavaScript está um pouco errada, é pegar o formulário, em vez de clicar no botão, mude para isso:

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>
    ";
    }
}
    
por Bainternet 01.09.2011 / 14:04
0

Eu sei que este post é antigo, mas aqui está um bom plugin que tem uma tonelada de diferentes opções de requisitos de postagem - WyPiekacz

    
por Travis Pflanz 18.04.2012 / 09:21