2019年9月17日火曜日

WordPressプラグイン開発のススメ~実践編

WordPressプラグイン開発のススメ~入門編の続きです。
実践的なサンプルコードでプラグイン開発に触れてみましょう。

functions.phpでやっていることをプラグインで

HTMLが先行してできあがっている開発の場合は、どうしても不要になりがちな自動整形機能、これを無効化する処理です。
// 本文の自動整形を無効化する
remove_filter('the_content', 'wpautop');
// 抜粋の自動整形を無効化する
remove_filter('the_excerpt', 'wpautop');

これをプラグインにしてみましょう。
<?php
/*
 Plugin Name: Control AUTOP Plugin
 Description: 自動整形機能を無効化するプラグイン
 */

// 本文の自動整形を無効化する
remove_filter('the_content', 'wpautop');
// 抜粋の自動整形を無効化する
remove_filter('the_excerpt', 'wpautop');

これをプラグインとしてインストールすると、「Control AUTOP Plugin」を有効化した場合に、自動整形機能が無効化されます。無効化した場合に、自動整形機能が有効化されます。

functions.phpでできないことをプラグインで

標準でバックアップをとれる利点はあるものの、放っておくとDBを圧迫しかねない投稿のリビジョン、これを制限する処理です。
// リビジョンの数を3つに制限する
define( 'WP_POST_REVISIONS', 3 );

リビジョンを保存しないようにする処理です。
// リビジョンの保存を無効化する
define( 'WP_POST_REVISIONS', false );

これをfunctions.phpに書き込むことはできません。'WP_POST_REVISIONS'はテーマを読み込むより先にwp_functionality_constants()の中で定義済みなので、定数の再定義ということになってしまい、これは不可能なのです。
書き込むなら、wp-config.phpに。ですが、コアファイルをあまり汚したくない人もいるでしょう(筆者)。
ならばプラグインだ。
<?php
/*
 Plugin Name: Control Revision Plugin
 Description: リビジョンの保存を無効化するプラグイン
 */

// リビジョンの保存を無効化する
define( 'WP_POST_REVISIONS', false );

これをプラグインとしてインストールすると、「Control Revision Plugin」を有効化した場合に、リビジョンの保存が無効化されます。無効化した場合に、リビジョンの保存が有効化されます。

functions.phpでやること

こうなると、いろんなことをプラグインでやって、functions.phpでやることがなくなりそうですが。
テーマと密接に関わるものは、プラグインではなくfunctions.phpでやったほうがよいでしょう。
例えば、カスタム投稿タイプの定義とか。htmlのコードを生成する関数とか。
別のテーマで再利用されたり当該テーマで不要になったりならなかったりが考え難いものですね。

こんな感じで、適宜プラグインの作成をしてみましょう。

2019年3月28日木曜日

WordPressプラグイン開発のススメ~入門編

WordPressのテーマ(テンプレート)開発をしていて、独自関数の定義や設定の書き換えをするとき、テーマ内のfunctions.phpに書き込んでいくのが基本かと思われます。
かくいう筆者も、WPテーマ開発に参画した当初は、仕様に合わせて実現方法を調べて、見つけた方法でコードをfunctions.phpにどんどん書き込んでいました。

時は流れて最近。WPにもう一歩踏み込んでみて、何でもかんでもfunctions.phpではなく、どんどんプラグイン化してしまうのもアリだな…?と感じるようになりました。

メリット

1.再利用が楽
わかりやすいメリットはこれですね。

2.要/不要の切り替えが楽
個人の好みによるかとは思いますが、functions.phpの一部をコメントアウトしたり戻したりするよりスマートでは。

3.functions.phpより読み込みが先
個人的には目から鱗だったメリットはこれです。
以下、WP(※WordPress 5.1.1)のコアファイルに踏み込んだお話ですが。
wp-settings.phpの中で、
foreach ( wp_get_active_and_valid_plugins() as $plugin ) {
    wp_register_plugin_realpath( $plugin );
    include_once( $plugin );
    do_action( 'plugin_loaded', $plugin );
}

でプラグインを読み込む処理の方が、
foreach ( wp_get_active_and_valid_themes() as $theme ) {
    if ( file_exists( $theme . '/functions.php' ) ) {
        include $theme . '/functions.php';
    }
}

でテーマを読み込む処理より先に行われています。さらに言うと、プラグインを読み込む処理とテーマを読み込む処理の間には、
wp_functionality_constants();

なども挟まっているので、functions.phpではできない、一部の定数の定義が可能になったりするんです。

デメリット

1.テーマファイル群とプラグインファイル群に分かれる
管理する範囲が、テーマファイル群1フォルダで済むところ、2フォルダ(以上)になったり。

2.有効化が必要
不要な時の無効化が楽な半面、管理画面(またはDB直接更新)で有効化が必須。

プラグインをつくってみる

今回は、「My Pluginという名前の」「固定のメッセージを返す関数を提供する」プラグインを作成し、テーマの中で使ってみましょう。

1.プラグインを作成する
1.1.ファイル構成
お馴染み「Hello Dolly」プラグインがそうであるように、1ファイルだけでも成立しますが、現実的には、フォルダ(パッケージ)を用意してその中にプラグインを構成するファイル群を配置することになるでしょう。
今回は、my-pluginフォルダを用意し、その中にプラグインのメインになるmy-plugin.phpファイルを配置します。

my-plugin/
  └my-plugin.php

1.2.ファイルヘッダー

テーマのstyle.cssにそのテーマの情報を書いたり、個々のページテンプレートファイルにそのテンプレートファイルの情報を書いたりするように、プラグインのメインになるファイルにはそのプラグインの情報を書きます。

my-plugin.php
<?php
/*
Plugin Name: My Plugin
Description: 固定のメッセージを返す関数を提供するプラグイン
*/

最低限必要な情報
  • Plugin Name(プラグインの名前)

次いで必要な情報
  • Description(プラグインの説明)

その他
  • Plugin URI
  • Version
  • Author
  • Author URI
  • License
  • Text Domain
  • Domain Path

1.3.プログラミング
functions.phpと書き方は同じです。PHPの記法に沿ってクラス定義やユーザー定義関数の作成などをします。

my-plugin.php
<?php
/*
Plugin Name: My Plugin
Description: 固定のメッセージを返す関数を提供するプラグイン
*/

/**
 * 固定のメッセージを返す
 * 
 * @return string メッセージ
 */
function get_my_plugin_message() {
    return 'This is My Plugin.';
}

2.プラグインを使う
2.1.ファイルアップロード
配布されているプラグインを手動インストールする場合、WPディレクトリ下のwp-content/pluginsフォルダにプラグイン用フォルダをアップロードしますね。
同じように、WPディレクトリ下のwp-content/pluginsフォルダにmy-pluginフォルダをアップロードします。

wp-content/
  └plugins/
      └my-plugin/
          └my-plugin.php

2.2.有効化
配布されているプラグインのインストールが済んだら、管理画面から有効化しますね。
同じように、管理画面のプラグイン画面を開き、「My Plugin」の有効化をクリックします。

2.3.テーマの中で使ってみる
有効化されたプラグイン内のユーザー定義関数などは、functions.phpや個々のページテンプレートファイルで使用できます。
例えば以下のように。

index.php
<?php echo get_my_plugin_message(); ?>

以上、プラグインのつくり方でした。

2018年12月31日月曜日

Composerのインストール

1.Composerとは
今更だけど、Composerとは、JavaのMavenに当たるものです。
また、
本体は、「composer.phar」という、JavaでいうJarの形で配布されているものです。

2.インストール
以下のURLの 「Manual Download」から「composer.phar」をダウンロードする。

https://getcomposer.org/download/

今回は「D:\work_tool\composer」に配置する。
つまり、こうなる。

D:\work_tool\composer\composer.phar

そして、このフォルダに、以下の内容の「composer.bat」を作成する。
@ECHO OFF
php "%~dp0composer.phar" %*

そして、今回の場合は、以下にパスを通す。
D:\work_tool\composer

3.使い方
これで、どこでもComposerが使える。

例えば、CakePHPを用意するには、
composer create-project --prefer-dist cakephp/app D:\workspace\php\cake\pleiades\xampp\htdocs\App
などとする。

PHPのWindowsへのランタイムのインストール

1.ダウンロード

以下のURL先で、ZIPのやつをダウンロードする。
今回は、「php-7.3.0-Win32-VC15-x64.zip」にしてみよう。

https://windows.php.net/download/

2.配置

解凍して、フォルダに配置する。
今回は、「D:\work_tool\php」 に配置する。
すなわちランタイムは、このようになる。

D:\work_tool\php\php-7.3.0-Win32-VC15-x64\php.exe

そして、
「D:\work_tool\php\php-7.3.0-Win32-VC15-x64」
のパスを通すように設定する。

3.PHPを使う

これで、JavaコマンドのようにPHPを使える。Javaのようにclassファイルにコンパイルする必要が無いので、便利かも。

例えば、
php -r "for ($i=0;$i < 10;$i++) echo $i;"
0123456789

例えば、以下のような「test.php」を作成して、
<html>
<head></head>
<body>
<?php
    for ($i=0;$i<10;$i++) echo $i;
?>
</body>
</html>
このフォルダがある場所で、
php -S localhost:8000 test.php
として、ブラウザでアクセスすることができる。

VisualStudioCode WordPressを使うために設定したこと(静的解析編)

1.どんなプラグインを使うことにしたか?
以下を使用することにしました。
 

2.PHP IntelliSense
 PHPの内部(ビルトイン)関数の候補を出してくれるはず。

phpのランタイムの場所を設定します。

 "php.executablePath": "D:/work_tool/php/php-7.2.5-Win32-VC15-x64/php.exe",
3.phpcsとphpcbf
phpcsで静的解析を行ってくれ、phpcbfでるはずです。

以下のように、composerにてインストールします。
今回はglobalではなくローカルにインストールしました。以下の例では「D:\workspace\php\newsite\tool」にインストールしました。「D:\workspace\php\newsite\tool」に移動して、以下を実行します。
 composer require --dev squizlabs/php_codesniffer
VSCodeの設定は以下のようになります。
    "phpcs.executablePath": "D:/workspace/php/newsite/tool/vendor/bin/phpcs.bat",
    "phpcbf.executablePath": "D:/workspace/php/newsite/tool/vendor/bin/phpcbf.bat",
4.フォーマットの設定をインストール

 ComposerでWordPressのフォーマットをインストールします。
 以下の例では、「D:\workspace\php\newsite\tool」にインストールしました。「D:\workspace\php\newsite\tool」に移動して、以下を実行します。
composer require --dev wp-coding-standards/wpcs
次に、phpcsにフォーマット設定を食べさせます。
例では、「D:\workspace\php\newsite\tool\vendor\bin」にphpscがインストールされ、フォーマットは「」にインストールされるので、「D:\workspace\php\newsite\tool\vendor\bin」に移動後、以下を実行します。

 phpcs --config-set installed_paths "D:/workspace\php/newsite/tool\vendor/wp-coding-standards/wpcs"
この後、以下を実行して、設定がうまくいっているか確認します。

phpcbf -i
 「 WordPress, WordPress-Core, WordPress-Docs, WordPress-Extra and WordPress-VIP」が出力されていれば成功です。

VSCodeには、以下を設定します。
"phpcs.standard": "WordPress",
"phpcbf.standard": "WordPress",
"phpcbf.onsave": true,
これでだいたい良いかなと思います。

5.最後の調整

このままだと、「post.php」にめちゃくちゃエラーが出るので、必要に応じて、以下を設定する。


 以下のことは別の機会に書こうかなと思います。
  •  PHPのランタイムのインストール 
  •  composerのインストール
  •  Debugの設定




2017年11月10日金曜日

オラクル認定試験の申し込み手順~初挑戦する人向け

先日、Java Silver SE 8 合格しました。
ただいま、ORACLE MASTER Bronze Oracle Database 11g 挑戦中です。SQL基礎は合格しまして、DBAの勉強中です。

ところで、オラクル認定試験の申し込み手順ですが、個人的には非常~にわかりづらかったんですよね。(なにしろあっちこっちのサイトにアクセスしなきゃならない!)
ので、次回試験を受けるときの備忘録も兼ねて、ここに手順を記しておきます。


  1. 試験の情報
  2. Oracleのアカウントをつくる
  3. ピアソンVUEのアカウントをつくる
  4. 受験チケットを購入する
  5. 試験の予約をする
  6. CertView初回認証作業

試験の情報

試験名・資格名を確認しておく。別々なので注意。
試験1Z0-808-JPN: Java SE 8 Programmer I
認定資格Oracle Certified Java Programmer, Silver SE 8 認定資格

Oracleのアカウントをつくる

日本オラクルのウェブサイトにアクセスする。

「サインイン」>「アカウントを作成」を選択。

すべて必須項目なので、すべての項目に入力し、「上記に同意してプロファイルを作成」で送信。

メール「お客様のOracleプロファイル - 電子メール・アドレスの確認」を確認。

24時間以内に「電子メール・アドレスの確認」を選択してアクセスする。
以上。

ピアソンVUEのアカウントをつくる

注意! ピアソンVUEのアカウント作成はオラクル認定試験のページまで進んでから!

ピアソンVUEのウェブサイトにアクセスする。

「登録・試験の予約」>「受験者ホーム」を選択。

「Oracle | オラクル認定試験」を検索し、「Oracle | オラクル認定試験」を選択。

「アカウントの作成」を選択。

プライバシーポリシーに同意してから、必須項目等に入力し、「次へ」で送信。
<筆者の場合>プロメトリックで配信していた試験を受験したことがあってOracle Testing ID (プロメトリックID) を持っている人は、「はい、私のOracle Testting IDは」をチェックし、それを入力するようですが、筆者まったくの初挑戦で当然持っていなかったため、これは「いいえ、Oracle Testing IDを知りません。」をチェック。
ピアソンVUEのアカウントを作成すると、Oracle Testing ID が付与されます。

連絡先情報(※英語)
日本語連絡先情報
アカウント情報
その他の情報(※オラクルパートナーネットワークについて)
・・・それぞれ、必須項目等に入力し、送信。

以上。Oracle Testing ID を確認しておく。

メール「ピアソン VUE オンライン予約「ログインアカウント」のご案内」を確認しておく。


受験チケットを購入する

日本オラクルのウェブサイトにアクセスする。

「メニュー」>「トレーニング」>「試験」>「受験チケットの購入」を選択。

「日本の受験チケットのご購入については、こちらからお願いします」を選択。

「受験チケット:Oracle認定資格 会場試験用」の「ご購入」を選択。

以下略。

<筆者の場合>Oracleから直接購入するよりも少々割安になるので、今回はこちら↓でチケットを購入しました。

販売代理店のオンラインショップにアクセスする。

「【ピアソンVUE専用】Oracle会場試験用受験チケット(電子チケット)」を選択。

以下略。

メール「【IT試験ドットコム:楽天支店】Oracle会場試験用受験チケットのご連絡」を確認しておく。


試験の予約をする

注意! 試験(1Z0-808-JPN: Java SE 8 Programmer I)を選択する前に、試験プログラム(Oracle | オラクル認定試験)を選択する!
ピアソンVUEのウェブサイトにアクセスする。

「登録・試験の予約」>「受験者ホーム」を選択。

「Oracle | オラクル認定試験」を検索し、「Oracle | オラクル認定試験」を選択。

「サインイン」を選択。

「ユーザー名」「パスワード」を入力し、「サインイン」で送信。

「試験会場での受験」を選択。

「1Z0-808-JPN: Java SE 8 Programmer I」を検索し、「1Z0-808-JPN: Java SE 8 Programmer I」を選択。

「試験を予約する」、「受験予約に進む」を、順に、選択。

テストセンターを検索し、
テストセンター
日付
試験開始時間
・・・順に、選択。

選択した試験を確認し、「次へ」を選択。

個人情報の確認
ポリシーに同意
・・・それぞれ、必須項目等に入力し、送信。

「バウチャーまたはプロモーションコードを追加」を展開し、「受験チケット(バウチャー)またはプロモーションコード」を入力し、送信。
<筆者の場合>メール「【IT試験ドットコム:楽天支店】Oracle会場試験用受験チケットのご連絡」のチケット番号を入力。

予約する試験を確認し、「予約内容の確定」で送信。


以上。

メール「Oracle認定プログラムの予約確認」を確認しておく。


CertView初回認証作業

注意! Oracle Testing ID はピアソンVUEのウェブサイトかメール「Oracle認定プログラムの予約確認」で確認する!
日本オラクルのウェブサイトにアクセスする。

「メニュー」>「トレーニング」>「認定資格リソース」>「CertView(認定資格情報ポータル)」を選択。

「Oracle Testing ID」「Eメールアドレス」を入力し、「ログイン」を選択。

<または>メール「Oracle認定プログラムの予約確認」を開き、「CertViewを利用するための手順」を選択してアクセスする。

「新認定システム(certview)にログイン」を選択。

同じく、「Oracle Testing ID」「Eメールアドレス」を入力し、「ログイン」を選択。

以上。受験後は、このシステム上で合否の確認ができる。

個人的には、ピアソンVUEのアカウントをつくる・・・ってどこからそーゆーフォームに進めばいいの!?Javaの試験が検索結果に出てこない!?、などに戸惑ったので、そのあたりを注記させてもらいました。

ここまでやって、申し込みが完了したなら、あとは本番に挑むばかりです。
Good Luck!

2017年2月23日木曜日

Sublime Text3でWebRelease2のタグの補完をしてみる

WebRelease2というCMSがあります。
私たちの会社では、このCMSのテンプレートを多数開発しています。
そこで、できるだけ楽に開発するにはということで、

Sublime Text3の補完機能を試してみました。

まず、
Sublime Textは、デフォルトで、htmlファイルを開くとhtmlのタグを補完してくれます。


しかしながら、当然ですが、これでは、WebRelease2の<wr-なんちゃら></wr-なんちゃら>というタグは保管されません。

そこで、「All Autocomplete」というプラグインを導入します。
※日本語化やインストール方法は、こちら

すると、

このように、「WebRealese補完機能設定ファイル.txt」という補完したいワードを並べた設定ファイルをを開いたまま、「新しいテキストドキュメントhtml」というhtmlファイルを編集すると、補完機能が効きます。


少しは楽になるかもしれません。