お問い合わせ

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

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

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

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

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

この記事の内容

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

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

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の関連記事の表示条件をカテゴリとタグのOR条件に変更

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

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

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

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

役に立ったら他の人にもシェア!
  • URLをコピーしました!
  • URLをコピーしました!
コメントを閉じる

コメント

コメントする

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

この記事の内容