はじめに
以下の質問に回答します。
フロントページでは、画面幅に応じてカードタイプを切り替えます。
実装手順
以下のコードをfunctions.phpに追加します。
- ラベルCocoon設定
表1に示す項目を設定をします。
Cocoon設定 設定 大項目 項目 設定値 インデックス リスト設定 カードタイプ エントリーカード(デフォルト) - ラベルPHPを追加
以下のコードをfunctions.phpに追加します。
add_filter('theme_mod_entry_card_type',function ($current_mod ) { if (is_front_top_page()) { $current_mod ='vertical_card_3'; } return $current_mod ; });
応用:画面幅に応じてカードタイプを切り替える方法
Cocoon設定→インデックス→「カードタイプ」で「エントリーカード(デフォルト)」以外を選択している場合でも、画面幅が834px以下になると、フロントページのカードタイプを自動的に「エントリーカード(デフォルト)」に切り替えます。
実装手順
以下のコードをfunctions.phpに追加します。
add_action('wp_enqueue_scripts', function () {
if (!is_front_top_page()) {
return;
}
// 対象要素を設定
$elm = '.list';
// カテゴリーごと(2カラム、3カラム)の場合
if (
is_front_page_type_category_2_columns() ||
is_front_page_type_category_3_columns()
) {
// 対象を新着記事に変更
$elm = '.list-new-entries .list';
}
ob_start();
?>
jQuery(function ($) {
const $elm = $('<?= $elm; ?>');
if (!$elm.length) {
return;
}
// カードタイプのCSSクラスを取得
const elm_class = $elm.attr('class').split(/\s+/).filter(c => c !== 'list');
// メディアクエリで画面幅を監視
const mediaQueryList = window.matchMedia('(min-width: 835px)');
const listener = (event) => {
// 画面幅に応じてCSSクラスを切り替え
$elm.toggleClass(elm_class, event.matches);
};
// 初期状態を設定
listener(mediaQueryList);
// 画面幅の変更を監視
mediaQueryList.addEventListener('change', listener);
});
<?php
wp_add_inline_script('jquery', ob_get_clean(), 'after');
}, 999);
さいごに
今回紹介した方法を使えば、フロントページで縦型カードを表示し、記事一覧ページではエントリーカードに切り替えることができます。
カードタイプの切り替えは、フックを使用して数行で実現できます。


