【WordPress】プラグインの作成手順について Part2【カスタム投稿】

WordPressにてテーマを作成する記事のPart2です。Part1はこちら

関連記事

今回はWordpressプラグインを作成していきましょう。例としてWordPressのカスタム投稿タイプを使用した不動産管理プラグインの作成手順を説明していきます。 WordPressの開発環境は構築済み WordPress[…]

前回はプラグイン作成とカスタム投稿の作成を行いました。
今回はWordPressの機能であるカスタムフィールドを追加して、さらに使い勝手を良くしていきます

【WordPress】プラグインの作成手順について Part2

WordPressのカスタムフィールドとは?

通常のWordpressの記事編集画面は上記のように「タイトル」「エディタ」だけがあるシンプルな形です。
ですが、サイトによっては画像を必ず登録したり、特定の表を作る必要があるでしょう。

例えば不動産紹介サイトの場合は不動産の画像は必要ですし、他にも土地面積や値段などが必要になります。
これらは必ず入力するものなので専用の入力欄を作ると分かりやすいですし、一から表を作成する必要もありません。

それを叶えてくれるのがWordPressに用意されているカスタムフィールドになります。
カスタムフィールドを使用することで、感覚的に操作が出来るようになります。
例えば不動産の画像や情報の専用の入力欄を設定すると以下のようになります。

カスタムフィールドによって、Wordpressに慣れていないユーザーでも編集がしやすいようになります。
この機能はWordPressにもともと用意されているものですので、設定も難しくありません。
今回はこれを作成していきます。

作成したプラグインにカスタムフィールドを追加する

今回追加するカスタムフィールドをプラグインファイルに記載していきましょう。
Part1までで、自作したプラグインのPHPファイルには既にカスタム投稿の記載があるはずです。

その下に、以下のような記載を追記しましょう。
ただし、「add_action(‘admin_menu’,’add_custom_fields’)」は「add_action( ‘init’, ‘create_post_type’ );」の下に記載しましょう。

また、もしもカスタムフィールドの追加が面倒と感じる場合は「不動産情報の登録」のみでも感覚はつかめると思います。
その場合は「不動産画像の登録」は不要です。

以下にカスタムフィールドに関する説明を記載します。(折りたたんでいます)

カスタムフィールドコードの説明

管理画面「admin_menu」に対してadd_custom_fieldsという自作関数を実行しています。
さらにadd_custom_fieldsではadd_meta_boxという関数を呼び出しています。

これはWordpress固有の関数で、カスタムフィールドを作成してくれます。
上記では「不動産画像の登録」と「不動産情報の登録」の2つのフィールドを定義しました。
idはフィールドのHTMLにつくid名です。(固有のものになります。見出しと同じく好きに変更してかまいません)

管理画面表示用関数はこれから作成するのでとりあえず設定しておきます。
また、カスタムフィールドを表示する投稿名は、先ほどPart1で作成したカスタム投稿の投稿名を入れてください。

さて、これでカスタムフィールドのエリアは確保しました。
しかしこれでは中身が何もないので、管理画面表示用関数を追加しましょう。

カスタムフィールド表示用のHTMLを作成する

管理画面表示用関数はカスタムフィールドの表示部分で、一般的なwebサイトと同じくHTMLからなります。
余力があれば外部ファイル化してもOKですが、今回は作成したプラグインファイルの中に記載してしまいましょう。

まずは不動産画像のカスタムフィールドからです。
先ほど作成したカスタムフィールドの関数の下に以下のコードを追記します。
(上の例で不動産画像のカスタムフィールドを追加していない場合は読み飛ばしてOKです)

ここで設定されている関数名「realestate_sustom_fields」は好きに決めて良いですが、add_meta_boxで指定した「管理画面用表示関数」と同じにしてください。
HTMLに関しては説明はしませんが、PHPおよびWordPressの機能に関連する部分については以下で説明します(長いので折りたたんでいます)

カスタムフィールド表示関数の説明

PHPでは反復処理が使用できます。
そのため、for文で同じHTMLを10回出力しています。とはいえ全く同じ内容を出力するわけではありません。
それぞれの画像に1から順に数字をつけようとしています。

なお、ループ回数の上限はmaxImgとして外部に出しています。phpファイルの先頭に「$maxImg = 10;」と記載しておけば、それを上の処理の「global $maxImg」で呼び出せます。
画像の登録数が増えても一か所変更するだけでOKなのでやりやすいですね。

ちなみに

<?php echo $realestate_image[$i] ? $realestate_image[$i] : ” ?>

は$realestate_imageがあれば$realestate_imageを出力し、
なければ何も出力しない、という簡単な分岐です。

また、画像が登録されたことを表すために、サムネイル画像を表示するようにしています。

$realestate_thumb = wp_get_attachment_image_src ( $realestate_image[$i], ‘thumbnail’ );

でサムネイルサイズの画像をWordpressのデータベースから取り寄せて、登録されている場合は表示するようにしています。
イメージとしては次のような形です。

画面の表示は同じですが、中での処理は異なるので注意してください。

また、nonceはwordpressに実装されているセキュリティの機能です。
管理画面などでメタデータを送信する場合には、仕様が推奨されています。
「wp-nonce」の部分については好きに書き換えてOKです。

nonceについては公式でも明言されているので、軽く目を通してもOKです。

WordPress Nonce(公式ページ)

同様に文言の登録フィールドも作成しましょうす。

出力は1行ですが、入力したい数に応じて増やしてください。
やっていることは同じで、登録されていれば、データベースから値を引っ張ってきています。

PHPを触ったことがあるならば、それぞれの情報を配列に入れてforループさせるといったこともできるでしょう。
続いて不動産画像登録のフィールドに対し、初回の登録時にサムネイル画像を出力するjsを記載しましょう。

WordPressメディアの追加のように画像を登録しよう

WordPressで記事を書いたことがある方は、画像の挿入をしたことがあると思います。
以下のようなメディアライブラリが出現して、使い勝手がいいですよね。

この機能は以下をphpファイルに記載するだけで実現できます。
「add_action( ‘admin_enqueue_scripts’, ‘add_api’ );」はこれまでのadd_action群の下に記載してください。

ただこれでは呼び出すだけなので、サムネイルの表示といったことはできません。
また削除ボタンも機能しません。
サムネイルを感覚的に操作するには、新たにjsファイルを追加する必要があります。

まずはphpファイルに以下の記述を追加しましょう。

これでadmin_footer(投稿画面の一番下)にjsファイルを読み込む記述が追加されます。
プラグインURLの中のjsファイルを参照しているのが分かります。
jsという名前のフォルダを作成し、その中にjsファイルを作成しましょう。ディレクトリ構成は以下のようになります。

「real-estate-Pager」は自作したプラグインの入っているフォルダ名に書き換えてください。
「realestate-img-adjustment.js」は好きな名前に変更してOKです。

最後に作成したjsファイルに以下を記載しましょう。

jsファイルですが、記載はjQueryとなっています。
jQueryを導入しないと動かないので、導入してくださいね。
(jQuery CDNで検索すると導入方法が山ほど出てきます)

jQueryの説明は今回は省略します。
動かない場合はphpファイルに書いたHTMLのidを確認してください。
jsとHTMLのid名を一致させないと、正常に動きません。

またWordPressはjQueryの「$」表記が使用不可なので、そこも注意してください。
(コピペすれば問題はありません)

関連記事

jQueryの記述と言うと、基本的なのは以下のような記述です。 $(document).ready( function(){ alert('jQuery'); }); ところがこの記述、Wordpressでは動きません。 […]

さて、次で最後です。
最後にWordpressのデータベースに画像や文言を登録しましょう!

カスタムフィールドの画像や文言をWordPressのデータベースに登録しよう

一般的な投稿と同じようにカスタムフィールドの内容もWordPressのデータベースに登録する必要があります。
カスタム投稿は勝手に登録してくれるのですが、カスタムフィールドは自分で登録処理を実装する必要があります。
phpファイルに以下を記載することでデータベースへの登録ができます。

機能の詳細については以下にまとめています。(折りたたんでいます)

カスタムフィールドの登録処理の詳細

add_actionはsave_post_realestate、つまり作成したカスタム投稿が下書き保存や公開ボタンを押された場合に処理を動かすようにしています。
WordPressにデフォルトで用意されている投稿は「save_post」で起動しますが、特定のカスタム投稿のみを対象にしたい場合は「save_post_カスタム投稿名」で可能です。

処理に関しては実にシンプルで、カスタムフィールドの値をデータベースに登録しているだけです。
もしも画像や文言を変更した場合は更新しますし、消した場合は削除しています。
更新が「update」、削除が「delete」と書かれている部分ですね。

ちなみに「update」は「更新」という意味ですが、データがない場合は登録してくれます。
文言の登録についても基本は同じです。登録個所を増やす場合はブロックをコピペして増やしてください。
プログラミングに詳しければ配列登録してループで一気に回すのもアリだと思います。

登録する際にnonceの確認をしています。これはセキュリティ的な観点で安全なデータの登録をするために必要な手法です。
nonceがセットされていて、かつ合っていれば登録するという形で、答え合わせをしているイメージですね。

nonceについて気になる場合は以下の公式サイトを確認してみてください。

https://wpdocs.osdn.jp/WordPress_Nonce

これで管理画面での文言や写真の投稿が出来るようになりました。

【WordPress】プラグインの作成手順について Part2 ~おわりに~

かなり文字数が長くなってしまいましたが、管理画面はだいぶ使いやすくなりました。他にも

  • 画像は一か所で登録できる
  • ドラッグで順番を入れ替えられる

といったことができると良いのですが、今回は基本的な実装と言うことで除外しています。

また、ここまでのソースファイルは以下のGitHubで公開しています。

https://github.com/Lotusxx/WordPress-/tree/main/Part2/real-estate-Pager

今回は登録を行いましたが、Wordpressのページに情報を表示する処理はまだです。
登録した画像や文言を表示するのは次のPart3で扱っています。

関連記事

WordPressにてテーマを作成する記事のPart3です。Part2はこちら [sitecard subtitle=関連記事 url=https://freemas.stepupkaraoke.com/making/wordpress/[…]