フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【WordPress】タクソノミーのタームが未選択の時に自動選択する方法

WordPress
ターム
タクソノミー
自動選択

タクソノミーはWordPressの標準機能のままでは未選択状態でも登録することが出来てしまいます。
構築するシステムによってはどれか1つは絶対に選択してもらわないと困るということもあるのではないでしょうか。
そんな時はfunctions.phpにコードを記述することで実現することが出来ます。
この記事ではタクソノミーのタームが未選択の時に自動選択して、未選択では登録されないようにする方法をご紹介したいと思います。

タクソノミーのタームが未選択の時に自動選択する

タームが選択されていない状態で公開ボタンや更新ボタンを押した時、自動でタームを選択するには以下のコードをfunctions.phpに記述します。

function term_automatic_check( $post_ID ) {
    $curTerm = wp_get_object_terms( $post_ID, 'タクソノミー名' );
    if ( 0 == count( $curTerm ) ) {
        $defaultTerm= array( タームID );
        wp_set_object_terms( $post_ID, $defaultTerm, 'タクソノミー名' );
    }
}
add_action( 'publish_投稿タイプ名', 'term_automatic_check' );

例えば、タクソノミー名が「news_category」、自動選択させたいタームのIDが「5」、このタクソノミーが紐づく投稿タイプ名が「news」だった場合は以下のようになります。

function term_automatic_check( $post_ID ) {
    $curTerm = wp_get_object_terms( $post_ID, 'news_category' );
    if ( 0 == count( $curTerm ) ) {
        $defaultTerm= array( 5 );
        wp_set_object_terms( $post_ID, $defaultTerm, 'news_category' );
    }
}
add_action( 'publish_news', 'term_automatic_check' );

これでタームが選択されていない状態で公開ボタンや更新ボタンを押した時、自動でタームを選択した状態で記事を保存することが出来ます。

投稿画面を開いた時に初期選択する

先ほどのコードの場合、公開ボタンや更新ボタンを押したタイミングでタームが選択されていない場合に自動設定する方法をご紹介しました。

続いてご紹介するのは、投稿画面を開いたタイミングでタームを初期選択する方法です。
投稿画面を開いたタイミングでタームを初期選択するには以下のコードをfunctions.phpに記述します。

function admin_print_footer_scripts_custom() {
    if ( get_post_type() === '投稿タイプ名' ) {
        echo '<script type="text/javascript">
            $(function(){
                if ( $(".categorychecklist input[type=checkbox]:checked").length == 0 ) {
                    $(".categorychecklist li:first-child input:first-child").attr("checked", "checked");
                }
            });
        </script>';
    }
}
add_action( 'admin_print_footer_scripts', 'admin_print_footer_scripts_custom' );

投稿画面を開いた時にタームが一つも選択されていない場合、タームの一つめの選択肢が自動で選択状態となります。

投稿の場合は、投稿タイプは「post」なので以下のように記述します。

function admin_print_footer_scripts_custom() {
    if ( get_post_type() === 'post' ) {
        echo '<script type="text/javascript">
            $(function(){
                if ( $(".categorychecklist input[type=checkbox]:checked").length == 0 ) {
                    $(".categorychecklist li:first-child input:first-child").attr("checked", "checked");
                }
            });
        </script>';
    }
}
add_action( 'admin_print_footer_scripts', 'admin_print_footer_scripts_custom' );

カスタム投稿で投稿タイプ名が「news」の場合は、以下のように記述します。

function admin_print_footer_scripts_custom() {
    if ( get_post_type() === 'news' ) {
        echo '<script type="text/javascript">
            $(function(){
                if ( $(".categorychecklist input[type=checkbox]:checked").length == 0 ) {
                    $(".categorychecklist li:first-child input:first-child").attr("checked", "checked");
                }
            });
        </script>';
    }
}
add_action( 'admin_print_footer_scripts', 'admin_print_footer_scripts_custom' );

これで投稿画面を開いたタイミングでタームを初期選択することが出来ます。

まとめ

いかがでしたか?
タクソノミーはWordPressの標準機能のままでは未選択状態でも登録することが出来てしまいます。
必ず1つはタームを選択させたいという場合は、今回ご紹介したコードを使い、登録内容を制御してみてください。