プラグインのひな型を使って簡単にプラグインを作る
プラグインのひな型を使って簡単にプラグインを作る。
この記事は、この記事の派生です → all-in-one-migration を作ってみる | 止まらないバックアップリカバリープラグインの自作
私がプラグインを作るときのひな型を解説します。
ダウンロードはこちらから→ゆずまるのPLUGIN ひな形【109】
必要に応じて // を外して生かしてください。
この書き込みがあなたの一助になれば幸いです。
この記事は、この記事の派生です → all-in-one-migration を作ってみる | 止まらないバックアップリカバリープラグインの自作
私がプラグインを作るときのひな型を解説します。
プラグインのひな型ファイル
私が自作したプラグインのひな型です。ダウンロードはこちらから→ゆずまるのPLUGIN ひな形【109】
プラグインのひな型ファイルの構造
プラグインのひな型には以下のものが入っています。- プラグインヘッダ
- バージョン番号
- プラグイン名
- プラグイン説明
- トレース関数
- フック
コンテンツ置換
設定画面
ショートコード - ショートコード関数
- コンテンツ置換関数
- 設定画面設定
- 設定画面関数
- option文字列変換関数
- デフォルト設定関数
- 文字列置換関数(改行外す)
- 文字列置換関数(改行)
- 文字列置換関数(記号→特殊文字)
- 文字列置換関数(特殊文字→記号)
プラグイン雛形の使い方
- 新しくプラグインを作るときは、ひな形のファイル名を変えます。
- pt_yuzu を XXXX_yuzu に置換します。
- フック内容を削除、追加します。
- モジュールを書き足していきます。
プラグインヘッダ
プラグインのヘッダです。プラグインの情報を記載します。
0001 /*
0002 Plugin Name: ゆずまるのPLUGIN ひな形
0003 Description: pt_yuzu を XXXX_yuzu に置換して使う
0004 Version: 2.40531
0005 Author: yuzumaru
0006 */
バージョン番号
バージョン番号を返す関数です。
私は、自動でバージョン番号を書き換える自作プログラムを使ってますが、基本的には、バージョンが上がるたびここを書き換えてください。
私は、自動でバージョン番号を書き換える自作プログラムを使ってますが、基本的には、バージョンが上がるたびここを書き換えてください。
0001 /********************************************************/
0002 function pt_yuzu_ver()
0003 /********************************************************/
0004 {
0005 // ------------------------
0006 // [ version 表記 ]
0007 // ------------------------
0008 return "2.40531";
0009 }
プラグイン名
プラグイン名を返す関数です。
0001 /********************************************************/
0002 function pt_yuzu_name()
0003 /********************************************************/
0004 {
0005 // ------------------------
0006 // [ Plugin名 ]
0007 // ------------------------
0008 return "ゆずまるのPLUGIN ひな形";
0009 }
プラグイン説明
プラグインの簡単な機能説明を返す関数です。
0001 /********************************************************/
0002 function pt_yuzu_description()
0003 /********************************************************/
0004 {
0005 // ------------------------
0006 // [ Description ]
0007 // ------------------------
0008 return "pt_yuzu を XXXX_yuzu に置換して使う";
0009 }
トレース関数
デバッグの時にその時点の変数などをファイル出力する関数です。
0001 /********************************************************/
0002 function pt_yuzu_tracesub($mess,$p='a',$w='a')
0003 /********************************************************/
0004 {
0005 //
0006 // --- $mess is single value ---
0007 // pt_yuzu_tracesub('---trace---','w');
0008 // pt_yuzu_tracesub($mess);
0009 //
0010 // --- $mess is array ---
0011 // ※secnd para is array title.
0012 // pt_yuzu_tracesub($mess,'---stack mess---','w');
0013 // pt_yuzu_tracesub($mess,'---stack mess---');
0014 //
0015 // --- trace file name modify ---
0016 // pt_yuzu_tracesub($mess,'f:xxxx','w');
0017 // pt_yuzu_tracesub($mess,'f:xxxx');
0018 //
0019 //return
0020 //
0021 $subh = 'pt_yuzu';
0022
0023 $path = plugin_dir_path(__FILE__); // 出力先 本プラグインフォルダー
0024 //$path = get_template_directory().'/'; // 出力先 現在使用中テーマ
0025 //$path = WP_CONTENT_DIR.'/'; // 出力先 WP-CONTENTS/
0026 //
0027 if(strtolower(substr($p,0,2))=='f:'){
0028 $file = $path.$subh.'_'.substr($p,2).'.cgi';
0029 $p = $w;
0030 }else{
0031 $file = $path.$subh.'_'.'log'.'.cgi';
0032 }
0033
0034 $head = '';
0035 if($p!='a' && $p!='w'){
0036 $head = $p;
0037 $p = $w;
0038 }
0039 $fp = fopen($file,$p);
0040 if($p=='w'&&$mess==''){
0041 }else{
0042 if(is_array($mess)){
0043 fwrite($fp, $head."\n");
0044 fwrite($fp, print_r($mess, true));
0045 fwrite($fp, "/"."$head\n");
0046 }else{
0047 if($head!=''){
0048 fwrite($fp, $head.'='.$mess."\n");
0049 }else{
0050 fwrite($fp, $mess."\n");
0051 }
0052 }
0053 }
0054 fclose($fp);
0055 }
トレース関数の使い方
基本形
pt_yuzu_tracesub(出力内容,’ファイルモード(省略可)’)
出力内容は、変数でも配列でも問題ありませんが、
配列の場合、見やすくヘッダフッタで囲みたい場合があります。
その場合は、
pt_yuzu_tracesub(配列変数,’配列見出し’,’ファイルモード(省略可)’)
出力ファイル名を変えたいとき(この場合、配列見出しは使えなくなる)
pt_yuzu_tracesub(配列変数,’f:ファイル名末尾文字列’,’ファイルモード(省略可)’)
pt_yuzu_tracesub(出力内容,’ファイルモード(省略可)’)
出力内容は、変数でも配列でも問題ありませんが、
配列の場合、見やすくヘッダフッタで囲みたい場合があります。
その場合は、
pt_yuzu_tracesub(配列変数,’配列見出し’,’ファイルモード(省略可)’)
出力ファイル名を変えたいとき(この場合、配列見出しは使えなくなる)
pt_yuzu_tracesub(配列変数,’f:ファイル名末尾文字列’,’ファイルモード(省略可)’)
0001 // --- $mess is single value ---
0002 // pt_yuzu_tracesub('---trace---','w');
0003 // pt_yuzu_tracesub($mess);
0004 //
0005 // --- $mess is array ---
0006 // ※secnd para is array title.
0007 // pt_yuzu_tracesub($mess,'---stack mess---','w');
0008 // pt_yuzu_tracesub($mess,'---stack mess---');
0009 //
0010 // --- trace file name modify ---
0011 // pt_yuzu_tracesub($mess,'f:xxxx','w');
0012 // pt_yuzu_tracesub($mess,'f:xxxx');
0013 //
フック
- コンテンツ置換
- 設定画面
- ショートコード
必要に応じて // を外して生かしてください。
0001 /********************************************************/
0002 // 設定
0003 /********************************************************/
0004 // apply_filters -> add_filter
0005
0006 //-------------------------------------------------------
0007 // コンテンツ編集
0008 //remove_filter('the_content','pt_yuzu_content');
0009 //add_filter( 'the_content','pt_yuzu_content');
0010 //-------------------------------------------------------
0011 //
0012 //-------------------------------------------------------
0013 // WP設定画面に追加
0014 add_action( 'admin_menu' ,'pt_yuzu_control');
0015 //-------------------------------------------------------
0016 //
0017 //-------------------------------------------------------
0018 // ショートコード
0019 //add_shortcode('pt_yuzu' , 'pt_yuzu_Shortcode');
0020 //-------------------------------------------------------
0021 //
ショートコード関数
ショートコード変換の本体になります。
ショートコードは、コンテンツのフック(the_content)より先に実行されます。
ショートコードは、コンテンツのフック(the_content)より先に実行されます。
0001 /********************************************************/
0002 function pt_yuzu_Shortcode($atts)
0003 /********************************************************/
0004 {
0005 // [shortCode year=xxxx month=xx ・・・]
0006 extract(shortcode_atts(array(
0007 'year' => date('Y'), // 開始年
0008 'month' => date('m'), // 開始月
0009 'count' => "1", // 繰り返し回数
0010 'eng' => "", // english : y
0011 ), $atts));
0012
0013 // :
0014 // :
0015 // $a0 = $year;
0016 // $a1 = $month;
0017 // $a2 = $count;
0018 // $a3 = $eng;
0019 // :
0020 // :
0021
0022 return($replace_data);
0023 }
コンテンツ置換関数
表示前の投稿内容を編集することができます。
0001 /********************************************************/
0002 function pt_yuzu_content($content) // コンテンツ編集
0003 /********************************************************/
0004 {
0005
0006 return($content);
0007 }
設定画面設定
ここは特に触る必要はありません。
0001 /********************************************************/
0002 function pt_yuzu_control() // WP設定画面に追加
0003 /********************************************************/
0004 {
0005 add_options_page(
0006 pt_yuzu_name() , // 1.設定画面での見出し
0007 pt_yuzu_name() , // 2.設定->メニューでの名前
0008 'administrator' , // 3.アクセスレベル
0009 __FILE__ , // 4.決まり文句
0010 'pt_yuzu_entry' // 5.設定の本体関数名
0011 );
0012 }
設定画面関数
設定画面の流れとして
- 保存:アクションで書き込みがあれば、「保存」「更新処理」
- 読込:オプションを読み込む
- 準備:データ表示準備
- 表示
0001 /********************************************************/
0002 function pt_yuzu_entry()
0003 /********************************************************/
0004 {
0005 echo "<h2>".pt_yuzu_name()." ver ".pt_yuzu_ver().".</h2>";
0006
0007 //----------------------------------------------------
0008 // 使用(メタ)
0009 // '<' 等の特殊文字を '<' 通常文字に変換して使用する
0010 //----------------------------------------------------
0011 //$pt_yuzu_title = pt_yuzu_entryget('pt_yuzu_title');
0012
0013 //----------------------------------------------------
0014 // 保存(entry 管理)
0015 //----------------------------------------------------
0016 if( isset($_POST['action']) ){
0017 // if(!isset($_POST['pt_yuzu_title'])){$_POST['pt_yuzu_title']='';} // field が checkbox 等の場合
0018 // update_option( 'pt_yuzu_title', pt_yuzu_metatext($_POST['pt_yuzu_title']) );
0019 }
0020 //----------------------------------------------------
0021 // 読込(entry 管理)
0022 //----------------------------------------------------
0023 // '<' 等の通常文字を '<' 特殊文字に変換 (pt_yuzu_default() の設定を忘れずに)
0024 //----------------------------------------------------
0025 // $pt_yuzu_title = pt_yuzu_entryget('pt_yuzu_title','entry');
0026
0027 //----------------------------------------------------
0028 // 表示準備
0029 //----------------------------------------------------
0030
0031 //----------------------------------------------------
0032 // 表示
0033 //----------------------------------------------------
0034 ?>
0035 <table style="width:80%;">
0036 <form method="post" action="">
0037 <tr>
0038 <td align="" style="font-weight:bold;font-size:120%;">
0039 <?php echo pt_yuzu_description(); ?>
0040 </td>
0041 </tr>
0042 <tr>
0043 <td align="" style="border:3px double #ccc;padding:0.5rem;">
0044 <table>
0045 <tr>
0046 <th>タイトル</th>
0047 <td><input type="checkbox" name="pt_yuzu_title" id="pt_yuzu_title" value="checked" <?php echo $pt_yuzu_title; ?></td>
0048 </tr>
0049 </table>
0050 </td>
0051 </tr>
0052 <!-- Button
0053 <tr>
0054 <td colspan="2"align="center">
0055 <p style="text-align:right;">
0056 <input type="submit" class="button-primary" name="action" value="<?php _e('Save Changes') ?>" />
0057 <input type="hidden" name="action" value="update" />
0058 </p>
0059 </td>
0060 </tr>
0061 -->
0062 </form>
0063 </table>
0064 <?php
0065 }
option文字列変換関数
オプションなどに保存した文字列は、エントリー時の文字列と表示時の内容とでは処理が変わります。
例えば、オプションを textarea で表示させ編集させたいときは、記号は、特殊文字にして設定しないと textarea が化けてしまいます。
逆に、表示のときに特殊文字のままだと html として機能しなくなります。そのため、表示前に特殊文字を記号に変換しないといけません。
それを行う関数です。
typeに値を入れると記号を特殊文字に変換して返します。
逆に値を入れない(省略)と特殊文字を記号に変換して返します。
例えば、オプションを textarea で表示させ編集させたいときは、記号は、特殊文字にして設定しないと textarea が化けてしまいます。
逆に、表示のときに特殊文字のままだと html として機能しなくなります。そのため、表示前に特殊文字を記号に変換しないといけません。
それを行う関数です。
typeに値を入れると記号を特殊文字に変換して返します。
逆に値を入れない(省略)と特殊文字を記号に変換して返します。
0001 /********************************************************/
0002 function pt_yuzu_entryget($name,$type='')
0003 /********************************************************/
0004 {
0005 $temp = get_option($name);
0006 if($temp==''){ $temp = pt_yuzu_default($name); } //デフォルト設定
0007 if($type==''){
0008 return(wp_migration_yuzu_plantext( $temp )); // < → <
0009 }else{
0010 return(wp_migration_yuzu_metatext( $temp )); // < → <
0011 }
0012 }
デフォルト設定関数
変数の初期値を設定します。
0001 /********************************************************/
0002 function pt_yuzu_default($smbl)
0003 /********************************************************/
0004 {
0005 // if($smbl=='pt_yuzu_title'){
0006 // return('ニュースとお知らせ');
0007 // }
0008 return('');
0009 }
文字列置換関数(改行外す)
ワードプレスの場合、投稿内容に勝手に p タグや改行が入ってきたりします。
なんでそういう加工をしたがるのかわからないのですが(自動化の弊害)それによって表示が思い通りになりません。
うちの場合は、勝手に改行もpタグ埋め込みもっ瀬ないようにする自作プラグインを入れてますが・・ほんとイライラします。
テーブルタグを埋め込んだ投稿の場合(普通はブロックエディタを使うから関係ないのかな?わからないけど)改行をいれてみてわかりやすく書きたいですが、そうするとテーブルの余計なところに改行が入ってダメージを食らいます。
例えば、
これだと余計な改行が入ってしまいます。
かといって、これだと
見通しが悪い
なのでこの関数を通すと見た目も無駄改行も解決するわけです。
なんでそういう加工をしたがるのかわからないのですが(自動化の弊害)それによって表示が思い通りになりません。
うちの場合は、勝手に改行もpタグ埋め込みもっ瀬ないようにする自作プラグインを入れてますが・・ほんとイライラします。
テーブルタグを埋め込んだ投稿の場合(普通はブロックエディタを使うから関係ないのかな?わからないけど)改行をいれてみてわかりやすく書きたいですが、そうするとテーブルの余計なところに改行が入ってダメージを食らいます。
例えば、
0001 $str = <<<EOM
0002 <table>
0003 <tr>
0004 <th>タイトル</th>
0005 </tr>
0006 <tr>
0007 <td>データ</td>
0008 </tr>
0009 </table>
0010 EOM;
これだと余計な改行が入ってしまいます。
かといって、これだと
0001 $str = <<<EOM
0002 <table><tr><th>タイトル</th></tr><tr><td>データ</td></tr></table>
0003 EOM;
なのでこの関数を通すと見た目も無駄改行も解決するわけです。
0001 $str = <<<EOM
0002 <table>
0003 <tr>
0004 <th>タイトル</th>
0005 </tr>
0006 <tr>
0007 <td>データ</td>
0008 </tr>
0009 </table>
0010 EOM;
0011 $str = pt_yuzu_cutcr($str);
0001 /********************************************************/
0002 function pt_yuzu_cutcr($str)
0003 /********************************************************/
0004 {
0005 $str = pt_yuzu_cr($str,'#cr#');
0006 $str = str_replace("#cr#",'' , $str);
0007 return($str);
0008 }
文字列置換関数(改行)
改行コードを同じコードに置き換えます。
改行コードの統一関数です。
改行コードの統一関数です。
0001 /********************************************************/
0002 function pt_yuzu_cr($str,$cr)
0003 /********************************************************/
0004 {
0005 //
0006 // 改行の統一
0007 //
0008 $str = str_replace("\r\n", "#cr#" , $str);
0009 $str = str_replace("\n" , "#cr#" , $str);
0010 $str = str_replace("\r" , "#cr#" , $str);
0011 $str = str_replace("#cr#", $cr , $str);
0012 return $str;
0013 }
文字列置換関数(記号→特殊文字)
記号を特殊文字に変換する関数です。
場面によっては足りないかもしれないので、その場合は個々に書き足してください。
場面によっては足りないかもしれないので、その場合は個々に書き足してください。
0001 /********************************************************/
0002 function pt_yuzu_metatext($val)
0003 /********************************************************/
0004 {
0005 $val = str_replace('<','<' ,$val);
0006 $val = str_replace('>','>' ,$val);
0007 $val = str_replace('"','"',$val);
0008 $val = str_replace("'",''' ,$val);
0009 return $val;
0010 }
文字列置換関数(特殊文字→記号)
特殊文字を記号に置換する関数です。
0001 function pt_yuzu_plantext($val)
0002 /********************************************************/
0003 {
0004 $val = str_replace('<' , '<' , $val);
0005 $val = str_replace('>' , '>' , $val);
0006 $val = str_replace('"' , '"' , $val);
0007 $val = str_replace(''' , "'" , $val);
0008 $val = str_replace('"','"',$val);
0009 $val = str_replace("'","'",$val);
0010 // &&?; で ? の表示
0011 $s=0;
0012 $p=strpos($val,'&&',$s);
0013 while( $p!==false ){
0014 $s = $p+2;
0015 if(substr($val,$p+3,1)==';'){
0016 $f = substr($val, 0,$p).substr($val,$p+2,1);
0017 $s = strlen($f);
0018 $b = substr($val,$p+4);
0019 $val = $f.$b;
0020 }
0021 $p=strpos($val,'&&',$s);
0022 }
0023 return $val;
0024 }
この書き込みがあなたの一助になれば幸いです。