カスタム投稿時のタームのデフォルト設定を可能にする
所沢市でWebサイト制作や欧州輸入品の販売を行っているRishunTradingです。
今回は、[カスタム投稿]時にタクソノミーを設定し、その後、Wordpressの管理画面から[ターム(カテゴリー)]を設定した場合の、[初期設定]を追加する方法について記載します。[初期設定]を追加すると、[ターム(カテゴリー)]を選択せずに投稿した場合、初期設定で設定された[ターム(カテゴリー)]が自動的に設定されるようになります。
わかりずらいので、標準の[投稿]機能を踏まえて説明を記載させていただきます。
1.今回やりたい事をまずは標準の[投稿]を例にして説明
1.1.[投稿]→[カテゴリー]の初期設定
デフォルトでは「未分類(uncategorized)」が初期設定として設定されています。
(関係のないところは画像にモザイクをかけています。)
そのため、[投稿]を新規追加した場合、何も選択しないと[未分類]がデフォルトで選択されます。
1.2.[投稿]→[カテゴリー]を追加し初期設定を変更
①[カテゴリー]に[ニュース]と[トピックス]を追加します。
②[設定]→[投稿設定]から[ニュース]を初期設定に変更する
③[投稿]を新規追加した場合、何も選択しないと[ニュース]がデフォルトで選択されます。
今回記載する内容は、「1.2.[投稿]→[カテゴリー]を追加し初期設定を変更」の②と同様に、[カスタム投稿]でも本初期設定を設定できるようにします。
2.[カスタム投稿]の[ターム(カテゴリー)]のデフォルト設定を[設定]→[投稿設定]から設定できるようにする。
functions.phpなどに以下の処理を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | //============================================================================ // [設定]→[投稿設定]から全てのカスタム投稿のデフォルトタームを設定可能とする。 //============================================================================ add_action('load-options-writing.php', 'add_default_term_setting_item' ); function add_default_term_setting_item(){ $post_types=get_post_types(array('public' => true, 'show_ui' => true ), false); if($post_types){ foreach($post_types as $post_type_slug => $post_type){ $post_type_taxonomies = get_object_taxonomies( $post_type_slug, false ); if($post_type_taxonomies){ foreach ($post_type_taxonomies as $tax_slug => $taxonomy) { if ( ! ( $post_type_slug == 'post' && $tax_slug == 'category' ) && $taxonomy->show_ui ) { add_settings_field( $post_type_slug . '_default_' . $tax_slug, $post_type->label . '用' . $taxonomy->label . 'の初期設定' , 'default_term_setting_field', 'writing', 'default', array( 'post_type' => $post_type_slug, 'taxonomy' => $taxonomy ) ); } } } } } } //---------------------------------------------------------------------------- // add_settings_fieldから呼び出されるコールバック関数 //---------------------------------------------------------------------------- function default_term_setting_field( $args ) { $option_name = $args['post_type'] . '_default_' . $args['taxonomy']->name; $default_term = get_option( $option_name ); $terms = get_terms( $args['taxonomy']->name, 'hide_empty=0' ); if ( $terms ) : ?> <select name="<?php echo $option_name; ?>"> <option value="0">設定しない</option> <?php foreach ( $terms as $term ) : ?> <option value="<?php echo esc_attr( $term->term_id ); ?>"<?php echo $term->term_id == $default_term ? ' selected="selected"' : ''; ?>><?php echo esc_html( $term->name ); ?></option> <?php endforeach; ?> </select> <?php else: ?> <p><?php echo esc_html( $args['taxonomy']->label ); ?>が登録されていません。</p> <?php endif; } //---------------------------------------------------------------------------- // Wordpressがオプションを更新すると呼び出され、デフォルトタームが設定される。 //---------------------------------------------------------------------------- add_filter( 'whitelist_options', 'allow_default_term_setting' ); function allow_default_term_setting( $whitelist_options ) { $post_types = get_post_types( array( 'public' => true, 'show_ui' => true ), false ); if ( $post_types ) { foreach ( $post_types as $post_type_slug => $post_type ) { $post_type_taxonomies = get_object_taxonomies( $post_type_slug, false ); if ( $post_type_taxonomies ) { foreach ( $post_type_taxonomies as $tax_slug => $taxonomy ) { if ( ! ( $post_type_slug == 'post' && $tax_slug == 'category' ) && $taxonomy->show_ui ) { $whitelist_options['writing'][] = $post_type_slug . '_default_' . $tax_slug; } } } } } return $whitelist_options; } //============================================================================ // カスタム投稿を登録した際、ターム(カテゴリ)が選択されていない場合、デフォルトタームが自動で設定される。 //============================================================================ add_action( 'wp_insert_post', 'add_post_type_default_term', 10, 2 ); function add_post_type_default_term( $post_id, $post ) { if((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) || $post->post_status == 'auto-draft') { return; } $taxonomies = get_object_taxonomies( $post, false ); if ($taxonomies) { foreach ($taxonomies as $tax_slug => $taxonomy) { $default = get_option( $post->post_type . '_default_' . $tax_slug ); if(!($post->post_type == 'post' && $tax_slug == 'category' ) && $taxonomy->show_ui && $default && ! ( $terms = get_the_terms( $post_id, $tax_slug ))) { if($taxonomy->hierarchical){ $term = get_term($default, $tax_slug); if($term){ wp_set_post_terms($post_id, array_filter(array($default)), $tax_slug ); } } else { $term = get_term($default, $tax_slug); if($term){ wp_set_post_terms($post_id, $term->name, $tax_slug); } } } } } } |
処理としては主に3つです。
①[設定]→[投稿設定]から設定できるようにする処理(1行目~41行目)
②[設定]→[投稿設定]で[変更を保存]を押下された際に、設定項目を保存する処理(42行目~61行目)
③[カスタム投稿]から投稿された際に、ターム(カテゴリ)が選択されていないければデフォルトのタームを設定する処理(62行目~)
3.実際に追加される設定画面
以下のようなイメージで設定項目が追加されます。
以上、皆さまのお役にたてれば幸いです。
WEB DESIGN全てお任せ!ホームページ制作
RishunTradingでは、日本にはないコンセプトや高いデザイン性をもったヨーロッパ製品の輸入販売、及び、Webサイト制作事業などをおこなっております。
「全てお任せ!ホームページ制作」は、ドメイン取得からサーバー設定、レスポンシブルデザイン(スマホ、タブレット対応)、SEO対策がすべて含まれたお得なホームページを制作するサービス商品です。
運用開始後に「Webサイト運用管理サービス(保守)」と組み合わせて購入しますと、メンテナンス、更新も含めてすべて弊社で実施しますので、お客様は安心して本業に集中する事ができます。
しかもなんと、「全てお任せ!ホームページ制作」は、¥100,000!で提供しております。
本業が忙しい中小企業様に大変ご好評を頂いている商品です。
独自ドメイン取得
サーバー開設&設定
レイアウト設計
レスポンシブルデザイン
(*1)検索エンジン最適化
(SEO対策)場所Maps
お問い合わせフォーム
SSL化
各種SNS連携
運用マニュアル