WordPressの投稿にSVGアイキャッチアイコンを表示したいと思いました。そこで、カスタムフィールドでSVGコードを管理し、投稿タイトル前に表示するプラグインを開発しました。
開発の背景と要件
GeneratePressテーマを使用したWordPressサイトで、各投稿にSVGアイキャッチアイコンを表示したいと思います。
具体的な要件は以下の通りです。
- 投稿編集画面でSVGコード全体を直接入力し、投稿詳細ページと一覧ページの両方でタイトル前にアイコンを表示します。
- また、SVGには自動的に
eyecatch-svgクラスを付与し、CSSでスタイリングできるようにします。
通常の画像アップロード方式ではなく、SVGコードを直接管理する方式を選択したのは、サイズやカラーの調整が柔軟に行えるためです。
プラグインの基本構造
WordPressプラグインのフォルダ構成に従って作成し、圧縮ファイルでインストールできるようにしました。
- フォルダ作成:
svg-eyecatch-icon という名前のフォルダを作成
- ファイル配置: 以下の2つのファイルをフォルダ内に配置
- ZIP圧縮: フォルダを圧縮してZIPファイルを作成
- WordPressにアップロード: 管理画面の「プラグイン」→「新規追加」→「プラグインのアップロード」からZIPファイルをアップロード
svg-eyecatch-icon/
├── svg-eyecatch-icon.php
└── readme.txt
メインのPHPファイルには、プラグイン情報をヘッダーコメントで記述すると、WordPress管理画面でプラグインとして認識されます。名前空間の競合を避けるために、プラグインの機能は、 SVGEyecatchIcon クラスにまとめています。コンストラクタでWordPressのアクションフックに関数を登録し、各機能を適切なタイミングで実行されるようにしました。これで管理画面からZIPファイルでインストールできるプラグインが完成します!
カスタムフィールドの実装
投稿編集画面にSVGコード入力用のメタボックス(カスタムフィールド)を追加しました。
WordPress標準のadd_meta_boxesアクションを使用します。add_meta_box関数を使い、投稿編集画面に新しい入力欄を作成できました。この関数では、表示位置や優先度を指定できます。今回はnormal位置にhigh優先度で配置し、目立つ場所に表示させました。
入力したSVGコードは、save_postアクションフックを使用して、投稿保存時にカスタムフィールドに保存します。セキュリティ対策として、nonceによる確認と権限チェックを実装しました。nonceは「一度だけ使用される数値」の略で、フォーム送信が正当なものかを確認するWordPressの仕組みです。これにより、意図しない投稿の改変を防げます。
SVGコードのサニタイズと許可タグの定義
SVGファイルにはJavaScriptコードが含まれる可能性があるため、セキュリティ対策が重要です