【WordPress】Custom Field SuiteからAdvanced Custom Field へ変更する方法

Pocket

久しぶりでございます。皆様お元気でしょうか。

WPプラグインの「Custom Field Suite」は、WordPressサイトの管理画面にカスタムフィールドを簡単に追加・管理でき、無料で繰り返しフィールドを使える点で人気がありましたが、
2024年8月20日にWordPressの公式リポジトリから削除されました。

多くの脆弱性が発見されていたことから、開発者による対応が難しくなったためであると推測されています。

↓↓詳しくはこちらのページで説明されています。
https://tane-creative.co.jp/column/6552/

そのため、Custom Field Suiteから、現在も開発保守されているAdvanced Custom Field へ移行する必要が出てきました。
このCFSからACFへ移行!という作業を最近、よく行っているので、その流れをまとめてみましたので、よかったらご参考にご覧ください。

Custom Field SuiteからAdvanced Custom Field へ変更する方法

テストサイトを作り、本サイトからデータをインポートする

いきなり本番を修正するとエラーが表層に出てしまうので、テストサイトで整えてからインポートする方法にしていました。

直近の本番サイトのデータを「All in one WP Migration」プラグインでエクスポートし、テストサイトにも同じ「All in one WP Migration」プラグインを入れておいて、データをインポートします。

All in one WP Migration プラグイン詳細はこちら

テストサイト管理画面のCustom Field Suiteを開き、フィールド名・該当のテンプレートPHPなどをメモ

インポートが終わったテストサイトの管理画面の「設定」→「Custom Field Suite」を開き、変更が必要なフィールドグループ名、関係する変更が必要なテンプレートphp名、グループ内のフィールド名を、メモ帳かなにかに入力しておきました。どれだけのフィールドを足さないといけないのか、どのテンプレートを修正する必要があるのかを一覧に残しておくことができるので、作業中の振り返りになります。

例えば下記のような感じでメモしておくと、わかりやすいと思います。

---------------------------------------------------------

フィールドグループ名:Aフィールドグループ

関係するテンプレートPHP:page-a.php

登録フィールド名:
繰り返しフィールド1  field01-loop     フィールドタイプ:loop
     タイトル  field01-title    フィールドタイプ:text
     内容    field01-content  フィールドタイプ:textarea

繰り返しフィールド2  field02-loop    フィールドタイプ:loop
       タイトル    field02-title   フィールドタイプ:text
       リンク     field02-file    フィールドタイプ:file

---------------------------------------------------------

Advanced Custom Fieldをインストールする

「Advanced Custom Field」は無料ですが
CFSでループを使っていた場合は、ACFの繰り返しフィールドを利用するので
「Advanced Custom Field Pro」が必要になり、こちらは有料版です。

プラグイン検索すると下記が表示されるので、インストールします。

ACF Pro はこちら

Advanced Custom Fieldにフィールドを登録する

さきほどメモした、フィールド名・該当のテンプレートPHPなどのメモを開き
ACFのフィールドを登録する画面を同時に開いて、
ACFに同じフィールド、フィールドグループを登録します。

フィールドグループ名の後ろに「ACF」と付けておくと
 入力画面で見た時に果たして「CFS」側のフィールドなのか「ACF」側のフィールドなのかが
 判別しやすくなります。

ACFの基本的な使い方については下記のブログがよくまとまっていました。
Advanced Custom Fieldsの基本的な使い方を紹介します

登録したフィールドに各ページから入力する

フィールド登録が終わったら、各入力画面を開いて確認します。
同じフィールド名で作ると、CFSの内容がデータベースからそのまま引き継がれるので、単一行テキストやテキストエリアは再入力は不要ですが、loop(繰り返しフィールド)のsubfieldの中身や、ファイルアップロード(画像)は引き継がれないため、該当ページを開いて、それぞれ再入力していきます。

先程の「Aフィールドグループ ACF」のタイトルフィールドは、入力画面でこんな感じになります。

該当のテンプレートPHPをAdvanced Custom Field用の出力コードに書き換え

管理画面で再入力が終わったらテンプレート側のPHPをCFS用からACF用に出力コードを書き換えていきます。
都度、FTPでテストサイトにアップロードして表示がされるか確認しながら進めましょう。

基本は下記です。

CFS->get() → get_filed() に書き換える!!

※例えば、真偽フィールドで内容表示非表示を切り替えている場合は

/*CFS用は下記*/
<?php if ( get_post_meta($post->ID,'check1',TRUE) ): ?>
	<a href="#"><?php echo CFS()->get('namae'); ?></a>
<?php else: ?><?php endif; ?>
↓
/*ACF用に変更*/
<?php if ( get_field('check1') ): ?>
    <a href="#"><?php echo get_field('namae'); ?></a>
<?php endif; ?>

※例えば、画像ファイルの場合は・・

/*CFS用*/
<img src="<?php echo CFS->get('photo01');?>" alt="画像">
↓
/*ACF用 フィールドに入力があれば表示する条件を追加した場合*/
<?php
$photo01' = get_field('photo01'); 
if ( $photo01' ): 
?>
<img src="<?php echo $photo01; ?>" alt="画像">
<?php endif; ?>

※例えば、CFSループからACF繰り返しフィールドへの変更は・・

/*CFS用*/
<?php $fields = $cfs->get('A-loop'); 
$fields_item = $fields[0]['A-loop-komoku']; 
if($fields_item) : ?>
<?php foreach ($fields as $field) :?>
<dl>
<dt><?php echo $field['A-loop-komoku']; ?></dt>
<dd><?php echo $field['A-loop-naiyo']; ?></dd>
</dl>
<?php endforeach; ?>
<?php else : ?>
<?php endif; ?>

↓

/*ACF用*/
<?php if( have_rows('A-loop') ): // リピーターフィールドにデータがあるかチェック ?>
    <?php while( have_rows('A-loop') ): the_row(); // 行ごとにループ ?>
        <dl>
            <dt><?php the_sub_field('A-loop-komoku'); ?></dt>
            <dd><?php the_sub_field('A-loop-naiyo'); ?></dd>
        </dl>
    <?php endwhile; ?>
<?php endif; ?>

ズボラな私は、便利なAI様GeminiChatGPTにコードを書き換えていただくことが多いのですが
テキスト部分をたまに「esc_html()」で括ってくださることがあり、その場合テキストエリア内の改行が出力されなかったり、brがそのまま出力されてしまったりします。
コードを調整しながら、都度、FTPでテストサイトにアップロードして表示を確認しながら進めます。

日付フィールドは出力する値にCFSとACFで差があるので注意が必要です。

Custom Field Suiteを無効化・全ページ表示確認

一通り8の変更作業が終わったら、プラグインの「Custom Field Suite」を無効化して表層画面で表示に問題がないか確認します。

入力に関係がないと思っていた画面でも、実はCFSを使っていた、ということが後から見つかりエラーが発生していることがあるので、念のためサイト内全ページをプラウザで確認しましょう。

テストサイトデータを本サイトにインポート

CFS無効後、プラウザ表示に問題がなければ、「All in One WP Migration」プラグインでテストサイトをエクスポートして本サイトにインポートすれば完成です。

この記事が気に入ったら
いいね ! しよう

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です