💬
wordpressでACFの保守性を高める
introduction
ACFってマジで便利で、クライアント側から簡単に文書修正ができ、かつその設定範囲はエンジニアによって無限大に広がる。しかし、自分が考えた中では非常に保守性の悪いコードになってしまっている。例えば、この下の中のactivity3がなくなって、新しくactivityを入れてほしいとなったときにその保守性の悪さは明らかになる(順番指定をしているが、3がなくなるだけで4を3にする作業は手作業のため、絶対バグる)。これを解消しようと思って考えた結果、たどり着いたのがACFの機能をより活用するということだ。
ではやってみる。
ACFのグループ機能を活用する
カスタムフィールドをグループ化することによって、実は可変性が簡単に実現できる。
このようにして、サブグループの内容はそれぞれのグループで不変にする(オブジェクト化する)ことによって、1つの可変コンポーネントとして利用できる。
実際にテーマ内に使うなら、以下のようにしてみるとよい。
オリジナルテーマ
<?php $fields = get_field_objects();?>
<?php foreach($fields as $filed_name=>$field_info):?>
<?php $field_array = $field_info['value'];?>
<!-- コンポーネント -->
<div class="flex-start hotel-list -sp-col mt-z">
<div class="hotel-list_hotel">
<img src="<?php echo get_stylesheet_directory_uri()."/images/".$field_array['hotelimg']; ?>" alt="<?php echo $field_array['hotelimgalt'];?>" class="hotel-img ob-fit">
</div>
<div class="hotel-list_text">
<h2 class="hotel-name"><?php echo $field_array['hotelname'];?></h2>
<h3 class="hotel-copy"><?php echo $field_array['hoteltitle'];?></h3>
<p class="justify"><?php echo $field_array['hoteltext'];?></p>
</div>
</div>
<? endforeach;?>
もしもグループ外にコンポーネント以外のカスタムフィールドを設定したければ(以下の写真)、以下のようにすれば良い。
別のカスタムフィールドを設定
<?php $fields = get_field('hotel');?>
<?php var_dump($fields);?>
<?php foreach($fields as $filed_name=>$field_info):?>
<!-- コンポーネント -->
<div class="flex-start hotel-list -sp-col mt-z">
<div class="hotel-list_hotel">
<img src="<?php echo get_stylesheet_directory_uri()."/images/".$field_info['hotelimg']; ?>" alt="<?php echo $field_info['hotelimgalt'];?>" class="hotel-img ob-fit">
</div>
<div class="hotel-list_text">
<h2 class="hotel-name"><?php echo $field_info['hotelname'];?></h2>
<h3 class="hotel-copy"><?php echo $field_info['hoteltitle'];?></h3>
<p class="justify"><?php echo $field_info['hoteltext'];?></p>
</div>
</div>
<? endforeach;?>
Discussion