この実装、面倒なら代行します
カスタムフィールドでチェックボックスを設けて、チャックした項目をページに表示することは簡単ですが、チェックしていない項目も含めて全項目を表示させ、かつチェックした項目は黒字で、チェックしていない項目は灰色で表示する、なんてケースの場合は少し面倒なので、今回はその方法についてご案内しようと思います。
たとえば、複数のホテルを運営する企業のホテル情報ページとかで、オプションとして
(海が近い,山が近い,アクティビティーあり,最寄り駅から徒歩10分以内,レンタカーあり,送迎あり,露天風呂,喫煙スペースあり,・・・)
みたいな項目があって、そのホテルが該当する項目を黒字で、該当しない項目は灰色字で表示する、なんてことありますよね。そういうシーンを想定してください。
なお、カスタムフィールドを管理する標準プラグインとして、100ウェブでは「アドバンストカスタムフィールド」を使っていますので、今回の事例も「アドバンストカスタムフィールド」でカスタムフィールドを管理する前提で話を進めます。
まず、カスタムフィールドの登録から。
チェックボックスのカスタムフィールド名を「hotel_label」とし、「選択肢」欄に
near_mountain : 山が近い
near_sea : 海が近い
activity : アクティビティーあり
near_station : 最寄り駅から徒歩10分以内
・・・
という具合に、値とラベルを登録します。
そして「返り値」欄は「Value」を選択します。
これでカスタムフィールドの登録は完了です。
次に該当のページを表示するテンプレートに以下のように記述します。
<?php if (have_posts()) { while (have_posts()) : the_post(); $hotel_label_obj = get_field_object('hotel_label'); $hotel_label_choices = $hotel_label_obj['choices']; $hotel_labels = $hotel_label_obj['value']; echo '<ul>'; foreach ($hotel_label_choices as $key => $value) { $is_selected = 'not_selected'; if (in_array($key, $hotel_labels)) { $is_selected = ''; } echo '<li><p class="' . $is_selected . '">' . $value . '</p></li>'; } echo '</ul> endwhile; }
処理の流れを説明すると、①チェックボックス全項目を取得するために get_field_object でチェックボックスのオブジェクトを取得してforeachで回して各項目を出力しつつ、②チェックされていない項目にはpタグに not_selected のクラスを付与、チェックされている項目にはクラスを付与しない、ということをやっています。
あとはcssで文字色を変えればいいだけです。
.not_selected { color: #ccc; }
お試しください。
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!
100ウェブで手がけた制作・開発案件を一部、ご紹介。
クライアントからご相談いただいた内容とその実装におけるポイント、工期、予算について確認いただけます。
【テレワーク実施中 につきお電話転送中】
コール中1秒程度無音状態になりますがそのままお待ちください。
受付時間
平日 10:00~18:00
メールでのお問い合わせでも
1営業日以内にご連絡いたします。