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ユーザーの声はなかなか届かないのがもどかしいですよね。
コメント