SWELLはブログ用に設計されたテーマです。ブログ以外の企業サイトなどにも使われることがありますが、それほどカスタマイズ性が高くないので一般的なサイトのテーマとしては使いにくいです。
SWELLの弱点としてよく言われていることに、カスタム投稿への対応の遅れがあります。
Snowmonkeyはサイト制作によく使われるテーマですのでカスタム投稿に完全に対応しています。
『SWELLでもカスタム投稿を使いたい』と思う人は多いと思います。
この記事ではSWELLでカスタム投稿を使う方法と必要なカスタマイズについてご紹介します。
SWELLにカスタム投稿を導入する時に便利なプラグイン
SWELLだからというわけではありませんが、カスタム投稿を使う場合に便利なプラグインがあります。
Custom Post Type UI
Custom Post Type UIプラグインを使うことで、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サイトマップは不要もしくは、自分で作ることになると思います。

まとめ
SWELLはカスタム投稿タイプやカスタムタクソノミーへの対応が十分ではありません。
それはSWELLがブログユーザーを対象としたテーマだからです。
利用者が少ない機能はテーマの機能としては対応したくない、もしくは、優先順位を下げるというのがSWELL作者の対応だと思います。
フォーラムはカスタマイズの質問は禁止されていますので、どうしても使いたかったら自分で調べてカスタマイズすることで対応しましょう。

コメント