WordPressのカスタムフィールド系プラグインが最近インストール不可になっていたりしている状況なので、今回はブロックエディタに対応したカスタムフィールドのように使える「Lazy Blocks」というプラグインのご紹介をさせていただきます。
こちらの記事は「Lazy Blocks」の新たな使い方がわかり次第、随時更新していく予定ですので、よろしくお願いいたします。
Lazy Blocksとはどのようなプラグインなのか?
Lazy Blockプラグインは簡単にいうと、カスタムブロックを作れるプラグインになります。設定をすると下記添付のようにブロックが追加されて、それを固定ページやカスタム投稿などに設置することで、登録したデータ(カスタムフィールドのようなデータ)をページに紐づけることができ、テンプレート直書き場合もPHPで表示することが可能です。
まずはLazy Blocksをインストールしよう
まずは管理画面の「プラグインを追加」から「Lazy Blocks」と検索窓に入れて、下記添付のプラグインをインストールして、有効化します。
インストール、有効化が完了すると下記添付のように管理画面にLazy Blocksのメニューが表示されます。黄色枠の「ブロック」から進むことで、カスタムブロックを新規追加していくことができます。
Lazy Blocksで繰り返しフィールドの設定をしてみよう
まずはLazy Blocksの「ブロック」のメニューから、下記添付の青枠の「新規投稿を追加」をクリックしてブロックを作ります。
ブロックの基本設定
「新規投稿を追加」から進むと、下記画面になるので、まずはカスタムブロックの基本設定をしていきます。
①カスタムブロックの名前を付けます。(グーテンブルクのブロック名となります)
②カスタムブロックのスラッグを設定します。(PHPでデータ取得する場合に使用します)
③カスタムブロックにアイコンを設定します(グーテンブルクのブロックのアイコンとなります)
④カスタムブロックのカテゴリを設定します(グーテンブルクのブロック選択上のカテゴリ)
⑤投稿画面上のどこでデータ入力するかを設定します(コンテンツ上かサイドバー上か)
繰り返し項目の設定
次は繰り返し項目の設定をしていきます。
①クリックしてフォーカスを当てる(クリックすると右サイドバーの項目が切り替わる)
②LABELを入力する(繰り返し項目の名称を登録します)
③NAMEにキーを入れる(他と被らない値を使用します。PHPで表示する場合に必要になります)
④TYPEを繰り返しに設定する(プルダウンで下の方にあります)
⑤繰り返し項目で繰り返して表示するLABELを入力します(ラベルの後ろに連番を入れたい場合は{{#}}と入力)
繰り返し項目内の入力欄の設定
次は繰り返し項目の入力欄を作っていきたいと思います。
今回は商品紹介の繰り返し項目なので、下記の入力欄を作っていきます。
- 商品画像
- 商品名
- 料金
繰り返し項目に入力欄を作るには上記添付の「Show 1 Child Control」の部分をクリックすると入力欄が出てきます。
商品画像の入力欄の設定
①LABELに項目名を入れる
②NAMEにキーを入れる(PHPで取得する場合に必要)
③TYPEをドロップダウンメニューから「画像」を選択
商品名の入力欄の設定
次の項目を追加するために「+ボタン」で項目を追加します。(青枠)
①LABELに項目名を入れる
②NAMEにキーを入れる(PHPでデータ表示時に必要)
③TYPEをドロップダウンメニューから「テキスト」に設定
料金の入力欄の設定
①LABELに項目名を入れる
②NAMEにキーを入れる(PHPでデータ表示時に必要)
③TYPEをドロップダウンメニューから「テキスト」に設定
繰り返し項目を公開する
繰り返し項目の設定が完了したので、下記の赤枠をクリックして公開して保存しておきます。
表示したいページにブロックを設定する
表示したいページの編集画面を開いてブロックを追加します。(固定ページ、投稿ページ、カスタム投稿ページどれでも大丈夫です)
表示したいページの編集画面(グーテンブルク)を開いて、ブロックのリストから先ほど作ったカスタムブロック(商品紹介)を選択します。(埋め込みカテゴリなので、1番下にあります)
①カスタムブロックをクリックする
②「Add Row」をクリックする
「Add Row」をクリックすると上記の入力欄が表示されるので、項目を入力していきます。
今回は2商品を登録しました。項目を設定したら最後に「公開」をクリックして保存しておきます。
PHPファイルに表示する設定を書く
カスタムブロックを設置したテンプレートファイルを開いて、下記のPHPコードを設置します。
<?php get_header(); ?>
<ul class="product-list">
<?php
$blocks = parse_blocks(get_the_content());
foreach ($blocks as $block) :
if ($block['blockName'] === 'lazyblock/products-block') :
$products_list_json = urldecode($block['attrs']['products-list']);
$products_list = json_decode($products_list_json, true);
if (!empty($products_list)) :
foreach ($products_list as $product_item) :
$product_image = $product_item['product-image']['url'];
$product_name = $product_item['product-name'];
$product_price = $product_item['product-price'];
?>
<li class="product-item">
<img src="<?php echo esc_url($product_image); ?>" alt="<?php echo esc_html($product_name); ?>">
<h3><?php echo esc_html($product_name); ?></h3>
<p><?php echo esc_html($product_price); ?></p>
</li>
<?php
endforeach;
endif;
endif;
endforeach;
?>
</ul>
<?php get_footer(); ?>
上記の処理内容を説明します。
6行目、parse_blocks(get_the_content());でページの全てのブロックのデータの配列を取得してます。
8行目でブロックデータの配列をループ処理して、9行目のif文で$block['blockName'] === 'lazyblock/products-block'という条件で今回指定したカスタムブロックの配列のみに絞り込んでいます。
11行目、12行目ではブロックのデータが暗号化されているので、その暗号化されたデータをjson形式にして読み取れるデータに戻しております(デコード処理)。
15行目、16行目、17行目、18行目は、json形式になっているデータをループで回して、繰り返し項目に入れたデータを取り出して変数に入れております。
21行目、22行目、23行目では取り出した繰り返し項目の入力内容を表示してます。
PHPを記述したページを表示する
今回設定してみたページを表示してみました。
今回設定した繰り返しフィールドのデータがページに表示されました。
CSSはお好きなように設定していただければと思います。
今回、カスタムフィールド系のプラグインではなく、カスタムブロックのプラグイン「Lazy Blocks」でカスタムフィールドのように入力したデータを表示することが実現できました。
また疑問点やおかしな箇所などありましたら、記事のコメント欄やフォームなどからメッセージをいただけますとありがたいです。