お問い合わせ

SWELLでカスタム投稿を使う手順と必要なカスタマイズまとめ

SWELLはブログ用に設計されたテーマです。ブログ以外の企業サイトなどにも使われることがありますが、それほどカスタマイズ性が高くないので一般的なサイトのテーマとしては使いにくいです。

SWELLの弱点としてよく言われていることに、カスタム投稿への対応の遅れがあります。

Snowmonkeyはサイト制作によく使われるテーマですのでカスタム投稿に完全に対応しています。

『SWELLでもカスタム投稿を使いたい』と思う人は多いと思います。

この記事ではSWELLでカスタム投稿を使う方法と必要なカスタマイズについてご紹介します。

SWELLにカスタム投稿を導入する時に便利なプラグイン

SWELLだからというわけではありませんが、カスタム投稿を使う場合に便利なプラグインがあります。

Custom Post Type UI

Custom Post Type UIプラグインを使うことで、functions.phpに記載することなくカスタム投稿やカスタムタクソノミーを追加することができます。

プラグインを使わずにfunctions.phpに自前でカスタム投稿を定義すると、ブロックエディタでカスタム投稿を認識しないことがあります。

詳細は以下の記事をご覧ください。

Custom Post Type Permalinks

Custom Post Type Permalinksプラグインを使うことで、カスタム投稿タイプのパーマリンク設定が拡張されます。あまり知られていませんが、このプラグインを導入するとカスタム投稿タイプのアーカイブが有効になります。

SWELLでカスタム投稿を使う場合に必要なカスタマイズ

カテゴリウィジェットを拡張

標準のカテゴリウィジェットをカスタムタクソノミーに対応できます。

<?php
function override_widget_categories() {
    class WP_Widget_Categories_Taxonomy extends WP_Widget_Categories {
        private $taxonomy = 'category';
 
        public function widget( $args, $instance ) {
            if ( !empty( $instance['taxonomy'] ) ) {
                $this->taxonomy = $instance['taxonomy'];
            }
 
            add_filter( 'widget_categories_dropdown_args', array( $this, 'add_taxonomy_dropdown_args' ), 10 );
            add_filter( 'widget_categories_args', array( $this, 'add_taxonomy_dropdown_args' ), 10 );
            parent::widget( $args, $instance );
        }
 
        public function update( $new_instance, $old_instance ) {
            $instance = parent::update( $new_instance, $old_instance );
            $taxonomies = $this->get_taxonomies();
            $instance['taxonomy'] = 'category';
            if ( in_array( $new_instance['taxonomy'], $taxonomies ) ) {
                $instance['taxonomy'] = $new_instance['taxonomy'];
            }
            return $instance;
        }
 
        public function form( $instance ) {
            parent::form( $instance );
            $taxonomy = 'category';
            if ( !empty( $instance['taxonomy'] ) ) {
                $taxonomy = $instance['taxonomy'];
            }
            $taxonomies = $this->get_taxonomies();
            ?>
            <p>
                <label for="<?php echo $this->get_field_id( 'taxonomy' ); ?>"><?php _e( 'Taxonomy:' ); ?></label><br />
                <select id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>">
                    <?php foreach ( $taxonomies as $value ) : ?>
                    <option value="<?php echo esc_attr( $value ); ?>"<?php selected( $taxonomy, $value ); ?>><?php echo esc_attr( $value ); ?></option>
                    <?php endforeach; ?>
                </select>
            </p>
            <?php
        }
 
        public function add_taxonomy_dropdown_args( $cat_args ) {
            $cat_args['taxonomy'] = $this->taxonomy;
            return $cat_args;
        }
 
        private function get_taxonomies() {
            $taxonomies = get_taxonomies( array(
                'public' => true,
            ) );
            return $taxonomies;
        }
    }
    unregister_widget( 'WP_Widget_Categories' );
    register_widget( 'WP_Widget_Categories_Taxonomy' );
}
add_action( 'widgets_init', 'override_widget_categories' );

カスタム投稿のアーカイブウィジェット

Custom Post Type Permalinksを導入して、以下の記事を参考にカスタム投稿のアーカイブウィジェットを導入します。

カスタムタクソノミーのラベルをヘッダーに表示する

SWELLはカスタムタクソノミーを使っても、ヘッダーなどに表示されるラベルは1つだけです。

この部分は、カスタムタクソノミーの使い方はユーザーごとに無限にありますので、各自カスタマイズが必要になります。

カスタム投稿の関連記事が表示されるようにカスタマイズ

SWELLの関連記事は、カスタムタクソノミーに対応していません。

テーマをカスタマイズすることで、カスタムタクソノミーに対応することができます。

関連記事のクエリパラメータをswell_related_post_argsフックで上書きできますので、そのフックを使ってカスタムタクソノミーに対応させます。

swell_related_post_argsフックの使い方については以下の記事を参考にしてください。

TOPの記事スライダーをカスタム投稿タイプに対応させる

SWELLのTOPページには記事スライダーを表示することができますが、カスタム投稿タイプに対応していません。

swell_pickup_post_argsフックを使えばスライダーに表示する投稿タイプをカスタマイズできます。

swell_pickup_post_argsフックの使い方は以下の記事を参考にしてください。

カスタム投稿タイプのHTMLサイトマップを作成する

カスタム投稿タイプを導入すると、『プラグインを使ってもHTMLサイトマップが作れない』ことに気が付くと思います。

HTMLサイトマップを作ってくれる定番のプラグインにPS AUTO SITEMPがありますが、残念ながらカスタム投稿タイプに対応していません。

もし、HTMLサイトマップが必要であれば別途カスタム投稿タイプに対応したHTMLサイトマップ生成プラグインを導入する必要があります。

ただし、多くの場合、カスタム投稿タイプは投稿数が膨大になるのが普通です。

最終的にはカスタム投稿タイプのHTMLサイトマップは不要もしくは、自分で作ることになると思います。

カスタムタクソノミーを使う場合

カスタムタクソノミーもCustom Post Type UIプラグインで作成するのが安全です。

もし、ブロックエディタにカスタムタクソノミーが表示されない場合は、以下の記事に原因と対策をまとめています。

カスタムタクソノミーを階層付きで定義して使用する場合、SWELLではWarningが出ることが報告されています。

親テーマ起因で発生する問題なので、現時点では親テーマを修正するしか対処方法がありません。今後親テーマが修正されることを期待しましょう。

まとめ

SWELLはカスタム投稿タイプやカスタムタクソノミーへの対応が十分ではありません。

それはSWELLがブログユーザーを対象としたテーマだからです。

利用者が少ない機能はテーマの機能としては対応したくない、もしくは、優先順位を下げるというのがSWELL作者の対応だと思います。

フォーラムはカスタマイズの質問は禁止されていますので、どうしても使いたかったら自分で調べてカスタマイズすることで対応しましょう。

役に立ったら他の人にもシェア!
コメントを閉じる

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

クリックできる目次