wordpress新規投稿追加を特定の条件で弾く

wordpressで新規投稿追加画面から新しく投稿を追加する際に、特定の条件を満たしていないものの投稿を許可しない方法についてまとめました。

add_action('admin_head-post-new.php', 'publish_admin_hook'); // 新規投稿画面でのみ関数を呼び出す
add_action('admin_head-post.php', 'publish_admin_hook'); // 投稿編集画面でのみ関数を呼び出す

function publish_admin_hook(){
  ?>
  <script language="javascript" type="text/javascript">
    jQuery(document).ready(function() {
      jQuery('#publish').click(function() {
            // validがtrueであれば投稿を許可する
        if(jQuery(this).data("valid")) {
          return true;
        }
        var form_data = jQuery('#post').serializeArray();
        var data = {
          action: 'pre_submit_validation',
          form_data: jQuery.param(form_data)
        };
        jQuery.post(ajaxurl, data, function(response) {
          if (response.indexOf('true') > -1 || response == true) {
                    // 返り値にtrueが含まれていればvalidをtrueにして返す
            jQuery('#publish').data("valid", true).trigger('click');
          } else {
                    // 返り値にtrueが含まれていなければvalidをfalseのままにして返す
            jQuery("#publish").data("valid", false);
          }
        });
        return false;
      });
    });
  </script>
  <?php
}

add_action('wp_ajax_pre_submit_validation', 'pre_submit_validation');

function pre_submit_validation(){
  parse_str($_POST['form_data'], $vars );
  $hoge = $vars['hoge'][0];
    // 新規投稿のカスタムフィールドについて条件を満たしているかどうか判断する
  if($hoge > 5){
    die();
  } else {
    echo 'true';
    die();
  }
}

この例では新しく追加する投稿のhogeというカスタムフィールドの値がある条件を満たしていなければ投稿を追加できないようにしています。