投稿日:2023年1月7日
更新日:2023年1月13日
始めに
前回は、PHP8.xのバージョンについて、問題点など明記しました。
そこで、決断したのが、他のプラグインは極力使わない!
自作出来るプラグインは、自分で作成する!
という事になります。
下記が、前回の記事になります。
今回は、プラグインの開発について、明記したいと思っています。
プラグインは、以前作ったことがあります。それを元に、もう少し綺麗(綺麗か?(笑))に、プラグイン配布が出来るように作っていきたいと思っております。
全てを記載する事は、難しいので、ご了承下さい。
又、やり方は人によって異なりますので、こちらについても、ご了承願います。
皆様方の参考に出来たら、嬉しく思います♪
もし参考になったら、広告を1回でいいので、クリックして下さい♪
自作プラグインのメリットについて
自作プラグインのメリットは、色々あると思っています。
テーマをFunction.phpでカスタマイズするなら、自作プラグインの作成をお勧めします。
私が思う、自作プラグインのメリットを箇条書きします。
- プラグインの自動バージョンアップにて、不具合が発生すること防ぐことが出来る。
- 実際こちらについては、多々経験して苦労しています。
- 自作プラグインを作成したら、他のサイトでも使用できる。
- 他のサイトでも、プラグインを有効にするだけ!
- テーマのFunction.phpに記載するものは、出来ない。
- テーマのFunction.phpは、ほとんどプラグイン化は可能。
- WordPressのバージョンアップにて、不具合が発生しにくい。
- PHPのバージョンアップにも、対応がしやすい。
- 機能をFunction化していれば、その部分を変更するだけで、非推奨命令を変えることが出来る。
まだまだあると思っていますが、とりあえず、思いついたことを明記しました。
では、実際にプラグインを作成していきたいと思っております。
今回は、簡単と思われる「Rtb_Auto_I_Catch」(自動アイキャッチ設定)を元に記載してみたいと思います。
尚、プラグイン 「Rtb_Auto_I_Catch」 は、無料配布しておりますので、良ければご使用ください。
(無料配布版は、ソースの中身は、難読化されておりますので、ソースの中身を見ることは、困難になります。)
(有料版は、ソースの難読化なしにて、提供しております。)
プラグインフォルダーを作成する。
まずは、wp-content\pluginsの配下にフォルダーを作成します。
例:rtb_Auto_I_Catch
うる覚えではありますが、WordPressのコーディング規約では、フォルダー名は小文字を推奨しております。
(私は、この規約を無視しております(笑)。ご了承願います)
PHPファイルを一つ作ります。
xxx.phpのファイルを一つ作る
先程作成したフォルダー( rtb_Auto_I_Catch )の中に、xxx.phpのファイルを一つ作ります。
例:rtb_Auto_I_Catch.php
画像では、色々ファイルが存在しますが、 rtb_Auto_I_Catch.php のファイル一つだけで構いません。
xxx.phpファイルの編集
xxx.phpのファイルをメモ帳などで、編集します。
(エディターは、Visual Studio Code(VsCode)をお勧めします。)
(ダウンロードは、こちらになります。)
(VsCodeは、Zipインストールをお勧めします。記事のどこかで記載しました(笑))
例: /* Plugin Name: RTB Auto I Catch */
これだけで、プラグインは作成出来ています。
実際は、プラグインのバージョン情報やプラグインの説明など欲しいので、
もう少し php を編集します。
私は、このように明記するようにしています。
例: /* Plugin Name: RTB Auto I Catch Text Domain: rtb_auto_i_catch Plugin URI: https://ratebelab.com/ Description: ラテベ ソフトラボ ラテベウィジェット 自動アイキャッチ登録 Version: 1.03.221224 Author: ratebelab.com Author URI: https://ratebelab.com/ License: GNU General Public License v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html */
上記を行うと、下記のように表示されるはずです。
上記は、プラグイン更新なども含めていますので、一部異なる可能性がありますが、
ほぼ同じようになると思います。
これで、プラグインの作成は、基本的には完了になります。
続いては、プラグインの機能を作っていきます。
プラグインの機能追加テスト
機能追加テスト
xxx.phpファイルを編集して、機能を追加していきます。
まずその前に、コメントの後に、以下を追加して下さい。
if ( ! defined( ‘ABSPATH’ ) ){ exit; }
これは、このPhpファイルに直接アクセスされても、実行出来ないようにする為となります。
続いて、下記を追加して下さい。
add_action( ‘wp_head’, function() { echo(‘★テスト’); });
これは、WordPressのヘッドに、「 ★テスト 」を表示させます。
★を付けたのは、見た時すぐわかるようにする為のものになります。
全てを記載した内容は、下記になります。
/* Plugin Name: RTB Auto I Catch Text Domain: rtb_auto_i_catch Plugin URI: https://ratebelab.com/ Description: ラテベ ソフトラボ ラテベウィジェット 自動アイキャッチ登録 Version: 1.03.221224 Author: ratebelab.com ratebe Author URI: https://ratebelab.com/ License: GNU General Public License v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html */ if ( ! defined( 'ABSPATH' ) ){ exit; } // phpファイルのURLに直接アクセスされても中身見られないようにする add_action( 'wp_head', function() { echo('★テスト'); });
プラグインの有効化
では、プラグインを有効かしてみましょう。下記のようになると思います。
フロントサイトを確認すると!下記のように表示されていると思います。
これで、プラグインが機能していることが解ると思います。
後は、本格的に、機能を追加すれば問題ありません。
又、プラグインは有効のままプラグインファイルを編集しても構いません。
本格的な機能の追加
さて、本格的に機能を追加していきたいと思いますが、
「Rtb_Auto_I_Catch」のプラグインは、「 RTB Base Core」と関連して作られています。
「 RTB Base Core」は、共通関数が含まれており、それを 「Rtb_Auto_I_Catch」 が使用しております。
よって、抜粋になること(実際には動きません)をご了承願います。
勘所がわかればと思いで、明記していきます。
アクションの追加
まず、機能を追加するには、アクションやフックを探すことになります。
WordPressサイトに、アクションやフックの一覧が記載されております。
ここに記載されているのを参考にしますが、こちらは全てがアクションやフックが登録されていません。
でも、ほとんどこのサイトにて機能は追加は可能と考えています。
今回使用するのが、下記になります。
フック・アクション | 説明 |
---|---|
admin_init | 管理画面の初期化時に実行されます。 今回は、アイキャッチ機能を有効にする為に使用します。 |
save_post | 保存時に自動で登録したいので、こちらを使用します。 |
アクションは作成したプラグインファイルに記載する事で、使用出来ます。
add_action('admin_init' ,'rtb_admin_init',99999 ); add_action('save_post' ,'rtb_save_post',99999 ,3 );
パラメータ (引数) は、以下になります。
wpのアクション名 | 自分のFunction名 | 優先順位 (高いほど後に実行される) | 自分のFunctionに渡す パラメータ(引数)の数 |
---|---|---|---|
admin_init | rtb_admin_init | 99999 | パラメータなし |
save_post | rtb_save_post | 99999 | パワメータ3つ |
続いて、それぞれの機能と追加していきます。
但し、抜粋になることを、お詫び申し上げます。
admin_init 機能の追加
説明より先に、コードは、以下になります。
/** * ▼ アイキャッチを有効化 * @param none なし なし * @return none なし なし */ function rtb_admin_init(){ // アイキャッチを有効にする。 // アイキャッチが有効になっていないか? if ( get_theme_support( 'post-thumbnails' ) ){ add_theme_support( 'post-thumbnails' ); } }
functionの前は、コメントになります。
コメントは記載しないでも動きますが、何年か後に見た時に、何かわかるように、記載する事をお勧めします。
簡単な説明としては、
テーマが、アイキャッチ機能を有効にしているかを、
get_theme_supportにてアイキャッチをサポートしているか判断しています。
サポートされていない場合、 add_theme_support( ‘post-thumbnails’ ) にて、アイキャッチ機能を有効にしています。
save_post 機能変更
ここからは、ちょっと難易度が高いと思います。
よって、抜粋になることをご了承願います。
イメージのコードは、以下になります。
(実際に作っているコードを説明の為に、変えています。)
/** * ▼ データベースに更新 * @param integer $post_id : 投稿ID * @param Wp_post $post : ポスト情報 * @param boolan $update : true:更新 * @return none なし : なし */ function rtb_save_post( $post_id ,$post ,$update ){ $clsFnc = new rtb_Auto_I_Catch_Func(); $POST = $_POST; $post_content = $post->post_content; $post_status = $post->post_status; $action = null; // アクション if ( $clsFnc->isKeyExists('action' ,$POST ) ){ $action = $POST["action"]; } // ★無視 if ( ! $action || $action != 'editpost' ){ return; } // アクション 修正時 if ( ! $post_id || $post_id == 0 ){ return; } // 空 if ( wp_is_post_revision( $post_id ) ){ return; } // リビジョン 過去情報 if ( ! $post_content ){ return; } // 空 if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ){ return; } // 自動保存 switch($post_status){ case 'auto-draft': // 自動保存 case 'draft': // 下書き case 'trash': // ゴミ箱 return; } // ★アイキャッチの有無 if ( $cls_Func->isPostIcat($post_id) ){ return; } // アイキャッチ登録済み // アイキャッチ自動登録 if (true){ // ★コンテンツより、最初のイメージ取得 $wp_ImgS = $cls_Func->get_Content_ImgPost($post_content ,true ,true ,false); if ( !$wp_ImgS ){ return; } $wp_Img = reset($wp_ImgS); // ★アイキャッチ登録 $is_post_meta = $cls_Func->put_post_meta( $post_id ,$wp_Img->ID ,'_thumbnail_id' ); } }
$clsが付いているものは、phpのクラスになります。
こちらは、非公開になりますので、ご了承願います。
★無視 にて、アイキャチを保存しなくてよい保存データを除外しています。
★アイキャッチの有無 が手動で登録されている、又は、一度でも登録されていれば、除外としています。
$cls_Func->isPostIcat は、アイキャッチが登録されているかを判定しています。その判定は、WordPressのget_post_meta関数にて取得が可能になります。
★コンテンツより、最初のイメージ取得は、そのコメントどおり、コンテンツから最初のイメージを取得しています。
$cls_Func->get_Content_ImgPost の簡易的内容は、コンテンツにあるimgタグを検索し、そのURLを取得します。
コンテンツにの中の検索には、正規表現にて取得可能になります。
★アイキャッチ登録 にて、アイキャッチを保存しています。
$cls_Func->put_post_meta の中身は、WordPressのupdate_post_meta関数になります。
まとめ
WordPressをカスタマイズする時に、プラグインは非常に有効と考えています。
今回は、思ったより難易度が高そうだったので、抜粋になってことをお詫び申し上げます。
時間があれば、ウィジェット(Widget)のプラグインも作成していますので、
その作り方を、今度ご紹介出来ればと思っています。
もう一度明記しますが、私の思うメリットは、下記になります。
- プラグインの自動バージョンアップにて、不具合が発生すること防ぐことが出来る。
- 実際こちらについては、多々経験して苦労しています。
- 自作プラグインを作成したら、他のサイトでも使用できる。
- 他のサイトでも、プラグインを有効にするだけ!
- テーマのFunction.phpに記載するものは、出来ない。
- テーマのFunction.phpは、ほとんどプラグイン化は可能。
- WordPressのバージョンアップにて、不具合が発生しにくい。
- PHPのバージョンアップにも、対応がしやすい。
- 機能をFunction化していれば、その部分を変更するだけで、非推奨命令を変えることが出来る。
ぜひ、カスタマイズが必要な場合は、自作のプラグインを作成して見て下さい。
なるべく、解りやすく明記していきたいと思っていますが、解りにくく思われた方は、ご了承願います。
又、あくまで私的なことも多くなってくるかと思われますので、そちらもご了承願います。
さらに、間違っていることもありますので、修正等は、申し訳ございませんが、自己責任でお願い申し上げます。
頑張って、これからも書いていきたいと思っていますので、どうぞよろしくお願いいたします。
最後までお読みくださいまして、ありがとうございます。
お願いです!広告を1回でいいので、クリックして下さい♪