WordPressのカスタマイズやテーマファイル、プラグインの作り方などデータベース構造から詳しく解説します。

投稿時に親カテゴリーが「未選択」または「2つ以上ある」場合にエラーを出力

今回は、記事を投稿時にカテゴリーの入力ミスがあった際にエラーページを吐き出す方法を紹介したいと思います。

エラーを吐き出す条件としましては、
①親カテゴリーが2つ以上選択されている
②子カテゴリーが2つ以上選択されている
③親カテゴリーが選択されていない
④公開直前にエラーを出力する

といった感じです。

今回困ったのは、JavaScriptやJqueryを使用したエラーの出力方法は調べればでてきたのですが、どうもWordPressのデフォルトの処理と衝突してしまっていたため上手くいかなかったんですね。
なので、自作することにしました!笑

ではコードを記載します。
参考URL

/ カテゴリーが未選択、もしくは親カテゴリーを複数選択している場合にアラートを表示

add_action( 'save_post', 'modify_post_status_if_category_check', 20, 1 );
function modify_post_status_if_category_check( $post_id ) {
  // Postオブジェクトを取得
  $post = get_post( $post_id );
  // Postが公開状態またはレビュー待ちの状態で保存された場合
  if ($post->post_status == 'publish' || $post->post_status == 'pending') {

    $cat_parent = array();
    $cat_children = array();
    $categories = get_the_category($post_id);
    foreach ($categories as $cat) {
      // 親カテゴリー子カテゴリーかで条件分岐
      if($cat->category_parent == 0) {
        array_push($cat_parent, $cat->term_id);
      }
      else {
        array_push($cat_children, $cat->term_id);
      }
    }
    // 親カテゴリーが2つ以上なら
    // FIXME: デフォルトカテゴリーが設定されている場合もあるので注意

    if (count($cat_parent) >= 2 || count($cat_children) >= 2 || count($cat_parent) <= 0) {
      // エラーページを表示
      $error_message = "";
      if ($post->post_status == 'publish') {
        $error_message .= "<h1>【エラー】記事の公開に失敗しました</h1>";
        $error_message .= "<p>";
        $error_message .= "カテゴリーの選択が正しいかご確認くださいませ!";
        $error_message .= "</p>";
      }
      elseif ($post->post_status == 'pending') {
        $error_message .= '<h1>【エラー】記事のレビュー待ちに失敗しました</h1>';
        $error_message .= "<p>";
        $error_message .= "カテゴリーの選択が正しいかご確認くださいませ!";
        $error_message .= "</p>";
      }

      $error_message .= '<div style=margin-top: 30px; margin-bottom: 30px;">';
      $error_message .= '<p style="font-size: 24px; color: red;"><a href="' . $_SERVER['HTTP_REFERER'] . '"><< 編集に戻る</a><p>';
      $error_message .= "</div>";

      $error_message .= "<hr />";
      $error_message .= "【注意】";
      $error_message .= "<ul>";
      $error_message .= "<li>記事は「<font color='red'>下書き</font>」のステータスに変更されています。</li>";
      $error_message .= "</ul>";

      // 投稿を下書き状態にもどす
      $post->post_status = 'draft';
      wp_update_post( $post );

      wp_die( $error_message );
    }
  }
}


コードの説明はまた今度書きますね!

関連記事

ページ上部へ戻る