プラグイン制作企画

プラグインのひな型を使って簡単にプラグインを作る

プラグインのひな型を使って簡単にプラグインを作る。
この記事は、この記事の派生です → all-in-one-migration を作ってみる | 止まらないバックアップリカバリープラグインの自作
私がプラグインを作るときのひな型を解説します。

プラグインのひな型ファイル

私が自作したプラグインのひな型です。
ダウンロードはこちらから→ゆずまるのPLUGIN ひな形【108】


プラグインのひな型ファイルの構造

プラグインのひな型には以下のものが入っています。
  • プラグインヘッダ
  • バージョン番号
  • プラグイン名
  • プラグイン説明
  • トレース関数
  • フック
    コンテンツ置換
    設定画面
    ショートコード
  • ショートコード関数
  • コンテンツ置換関数
  • 設定画面設定
  • 設定画面関数
  • option文字列変換関数
  • デフォルト設定関数
  • 文字列置換関数(改行外す)
  • 文字列置換関数(改行)
  • 文字列置換関数(記号→特殊文字)
  • 文字列置換関数(特殊文字→記号)

プラグイン雛形の使い方

  1. 新しくプラグインを作るときは、ひな形のファイル名を変えます。
  2. pt_yuzu を XXXX_yuzu に置換します。
  3. フック内容を削除、追加します。
  4. モジュールを書き足していきます。

プラグインヘッダ

プラグインのヘッダです。プラグインの情報を記載します。
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:ファイル名末尾文字列’,’ファイルモード(省略可)’)

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)より先に実行されます。

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 }

設定画面関数

設定画面の流れとして

  1. 保存:アクションで書き込みがあれば、「保存」「更新処理」
  2. 読込:オプションを読み込む
  3. 準備:データ表示準備
  4. 表示
となります。

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に値を入れると記号を特殊文字に変換して返します。
逆に値を入れない(省略)と特殊文字を記号に変換して返します。

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タグ埋め込みもっ瀬ないようにする自作プラグインを入れてますが・・ほんとイライラします。

テーブルタグを埋め込んだ投稿の場合(普通はブロックエディタを使うから関係ないのかな?わからないけど)改行をいれてみてわかりやすく書きたいですが、そうするとテーブルの余計なところに改行が入ってダメージを食らいます。

例えば、
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 }

この書き込みがあなたの一助になれば幸いです。
スポンサードリンク

関連記事一覧