お問い合わせ

SWELLカスタマイズ|関連記事の表示条件をカテゴリとタグのOR条件に変更する

SWELLの関連記事は、カテゴリかタグでの絞り込みの2択です。

カテゴリとタグのAND条件やOR条件といったバリエーションはありません。

幸いなことに、関連記事のクエリパラメータはフィルターフックで書き換えられますので、簡単にカスタマイズが可能です。

この記事では、関連記事をカテゴリとタグのOR条件で表示する場合のカスタマイズについてご紹介します。

この記事を書いた人

Wordpressのカスタマイズ歴10年のプロです。無料から有料までWordpressテーマの使用経験は豊富で、テーマのカスタマイズに関する知見も深い。Webサイト制作からカスタマイズまで仕事を請け負った実績は多数あり。

目次

使用するフィルターフック

swell_related_post_argsを使います。

このフックは、クエリパラメータが渡されますので、好きなように書き換えてあげればいいですね。

カスタマイズコード

前半部分は、カテゴリとタグのIDを取得しているSWELLで使わているコードそのままです。

後半部分は、tax_queryにパラメータを渡しています。

'relation' => 'OR'でORとなっている部分をANDに変えれば、カテゴリとタグのAND条件になります。

’orderby’ => ‘rand’でランダムに記事を選んでいます。

他のタクソノミーを追加することも簡単にできます。

'taxonomy' => 'category'の部分をタクソノミー名に変えて、

'field' => 'term_id'の部分や'terms' => $cat_arrayの部分をタクソノミー用に変えればいいだけです。

add_filter( 'swell_related_post_args', function($args){
	global $post;
	$the_id = $post->ID;
		// カテゴリ情報から関連記事をランダムに呼び出す
	$categories = get_the_category( $the_id );
	$cat_array  = [];

	foreach ( $categories as $the_cat ) {
		array_push( $cat_array, $the_cat->cat_ID );
	}
	if ( ! empty( $cat_array ) ) {
		$args['category__in'] = $cat_array;
	}

	// タグ情報から関連記事をランダムに呼び出す
	$tags      = wp_get_post_tags( $the_id );
	$tag_array = [];

	foreach ( $tags as $the_tag ) {
		array_push( $tag_array, $the_tag->term_id );
	}

	if ( ! empty( $tag_array ) ) {
		$args['tag__in'] = $tag_array;
	}
	unset($args['category__in']);
	unset($args['tag__in']);
	$args['orderby'] = 'rand';
	$args['tax_query'] = array(
    'relation' => 'OR',
    array(
        'taxonomy' => 'category',
        'field'    => 'term_id',
        'terms'    => $cat_array,
    ),
    array(
        'taxonomy' => 'post_tag',
        'field'    => 'term_id',
        'terms'    => $tag_array,
    ),
);


//echo '<pre>'; 	var_dump($args);echo '</pre>';
	return $args;
} );

まとめ

SWELLはユーザーが多いので、フックによるカスタマイズの幅がもっと広がると魔改造する人たちが増えてもっと使い方の幅が広がって、使って楽しいテーマになれると思うんですよね。

Cocoonとかはフックは仕込みましたのであとは好きにしてくださいという感じで、使いこなす楽しみがあります。

SWELLはフォーラムの利用規約が厳しいので気軽に書き込むとダメージを食らいますから、書き込む人はあまり多くありません。

SWELLユーザーの声はなかなか届かないのがもどかしいですよね。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!

コメント

コメントする

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

目次