WordPress 初めてのプラグイン作成〜Hello Worldプラグインと多言語対応する方法

WordPressプラグインについて、作成するときに知っていると役に立つ情報を紹介していきます。
初回はプラグイン作成の基本となるHello Worldプラグインと、多言語対応する方法についてご紹介します。

どんなプログラミング言語でも始めは「Hello World」から始めます。Hello Worldを通じてシンプルなプラグイン作成し、その後に付けたい機能を足して行く。作成に慣れてきたら有名なプラグインを参考にソースコードを眺めてみる。

そう、プラグイン作成は一日にしてならず。みなさんも一緒にプラグイン作成をはじめてみましょう。

 

今回のゴール

WordPressの管理画面にプラグインの多言語化対応を利用し、「こんにちは!」と出力する。

 

 

 

環境

今回検証した環境は以下の通りです。

WordPress3.6、3.8
PHP5.3.6
Apache1.3
MySQL5

 

Hello Worldプラグイン作成手順

  1. 今回作成するプラグインの名前を決めます。
    このプラグイン名は、現在公開されているプラグインとかぶらない、ユニークな名前を付ける必要があります。
    今回は、「My Hello World」とします。
     
  2. ファイルとフォルダの作成
    プラグイン名が決まったら、ファイルとフォルダを作成します。

    WordPressのプラグインは、下記フォルダに作成をします。
    /wp-content/plugins

    /wp-content/plugins/my_hello (フォルダーの作成)
    /wp-content/plugins/my_hello/my_hello.php
    /wp-content/plugins/my_hello/readme.txt
    /wp-content/plugins/my_hello/languages (フォルダーの作成)
     

  3. my_hello.phpをテキストエディタで開き、プラグイン情報をヘッダーに入力します。
    /*
    Plugin Name: (プラグインの名前)
    Plugin URI: (プラグインの説明と更新を示すページの URI)
    Description: (プラグインの短い説明)
    Version: (プラグインのバージョン番号。例: 1.0)
    Author: (プラグイン作者の名前)
    Author URI: (プラグイン作者の URI)
    License: (ライセンス名の「スラッグ」 例: GPL2)
    */
    

    今回はこのように入力しました。

    <?php
    /*
    Plugin Name: My Hello World
    Plugin URI: http://shared-blog.kddi-web.com/
    Description: This is Hello World Plugin for beginner.
    Version: 0.001
    Author: Abechiyo
    Author URI: http://shared-blog.kddi-web.com/
    */
  4. 次にライセンス情報をヘッダーに追記します。(詳しくは、WordPressのCodexを確認ください) 「Copyright 2013 Abechiyon」の箇所を、作成した年と作成者に変更ください。
    Copyright 2013 Abechiyo
    
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License, version 2, as
        published by the Free Software Foundation.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  5. 手順1で作成した「my_hello」に作成したファイルをアップロードし、プラグイン情報が正しく表示されるか、「WordPress管理画面 > プラグイン」より確認しましょう。

    正しく表示されていたら、プラグインを「有効化」してください。
     
  6. 次に管理画面のメニューバーに「Hello Worldのテスト」メニューをWordPressのアクションフックという機能を利用し、追加します。
    ※このフック機能を使ってWordPressのプラグインを効率良く作成することができます。どんなフック機能があるのか知ることがプラグイン作成には重要です。

    「my_hello.php」に次の行を追加します。

    // 管理メニューに追加するフック
    add_action('admin_menu', 'add_hello_page');
    function add_hello_page() {
      add_management_page('Hello Worldのテスト', 'Hello Worldのテスト',8,
                  'Hello_World','my_hello_world_page');
    }
    

    「add_action」は管理メニューに追加するフックです。 第2引数の「add_hello_page」は、次の行で指定した関数(function)を呼び出しています。
    「add_hello_page」関数内の、「add_management_page」が実際にWordPressの管理メニューに追加するための関数になります。
    第1引数より、「ページタイトル、メニュータイトル、アクセスレベル、ページを表示するためのPHPファイル、呼び出す関数」になります。
    詳しくは「管理メニューの追加」を参照ください。

    アクセスレベルですが、どの権限を持ったユーザーがアクセスできるのかを指定することが出来ます。
    詳しくは「User Level Capability Table」を参照ください

    以上で、管理ページメニューに、「Hello Worldのテスト」が追加されました。
     

  7. 「Hello Worldのテスト」をクリックしたら、「Hello World」と表示されるように関数を追加します。

    先ほど追記した、「my_hello.php」の下に以下の関数を追加します。

    function my_hello_world_page(){
       $message = 'hello world' ;
       echo '<h1>'.$message.'</h1>';
    }
    

    $message = 'hello world' ;
    「$message」という変数(文字列などを入れる箱と思ってください)に、「hello world」という文字列を代入します。
    文字列はシングルクォーテションで囲みます。

    echo '<h1>'.$message.'</h1>';
    PHPの言語構造、echoを使用して、画面に出力を行います。
     

  8. それでは「my_hello.php」を保存し、ファイルをアップロードし、確認してみましょう。

    管理画面のツールに「Hello Worldのテスト」が表示されクリックすると、「hello world」と表示されたと思います。

     

  9. 次に「hello world」を今回のゴールであります、「こんにちは!」に変換しましょう。

    プラグインは英語で作成したものを、日本語に翻訳するように作成するのが推奨されています。
    ですので、「プラグイン作成の基本」に多言語対応を折り込みました。

    翻訳ファイルは、.poファイルと、.moファイルが必要なります。両ファイル共に「/wp-content/plugins/my_hello/languages」にアップロードします。

    まず、先頭行に下記を追加します。

    load_plugin_textdomain
    ( 'my_hello', false, basename( dirname( __FILE__ ) ) . '/languages' );
    

    詳しい書式は「Function Reference/load plugin textdomain」を参照ください。

    load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) 
    $domain:ユーニークなID、プラグイン名がユークですので、プラグインを使用します。
    $abs_rel_path:false(default値、falseが推奨されています)
    $plugin_rel_path:翻訳ファイルの格納場所です。

    翻訳したい文字列に、__('文字列' , 'ID') か、_e('文字列' , 'ID') を追加します。
    第2引数は、load_plugin_textdomainで指定したユニークなIDになります。
    __は、文字の翻訳を行います。
    _eは、文字の翻訳を行い、出力も行います。

    $message = 'hello world';を下記に書き換えます。

    $message = __('hello world', 'my_hello');
    
  10. 翻訳ファイル.mo、.poを用意する

    まず元となる、.poファイルを用意します。
    WordPressで使用するベーシックな.poファイルはこちらにあります。
    上記からコピーするのも良いですし、こちらのコードを使っても良いと思います。

    # Copyright (C) 2013 WordPress
    # This file is distributed under the same license as the WordPress package.
    msgid ""
    msgstr ""
    "Project-Id-Version: Hello World Project\n"
    "Report-Msgid-Bugs-To: http://wppolyglots.wordpress.com\n"
    "POT-Creation-Date: 2013-12-26 17:03+0900\n"
    "PO-Revision-Date: 2013-12-26 17:03+0900\n"
    "Last-Translator: masayuki abe <masayuki.abe@abe.com>\n"
    "Language-Team: abechiyo <masayuki.abe@kddi-web.com>\n"
    "Language: ja_JP\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    
    #: hello.php:49
    msgid "hello world"
    msgstr "こんにちは!"
    

    作成した翻訳ファイルを、「my_hello-ja.po」で保存します。ファイル名は「ユニークID-国.po」となります。これが少しでも違うと認識しませんので気をつけてください。

     

  11. 次に.moファイルを作成します。

    .moファイルは様々なツールや方法で作成することができるのですが、色々と調べた結果、Poeditというソフトが人気のようですので、こちらを紹介します。

    Poeditoを使い、「my_hello-ja.mo」を作成します。
    使い方については「Poeditを使ったWordPressの翻訳ファイル.po、.moファイル作成方法」を参照ください。 

    「my_hello-ja.mo」はこちらになります。

    de12 0495 0000 0000 0200 0000 1c00 0000
    2c00 0000 0500 0000 3c00 0000 0000 0000
    5000 0000 0b00 0000 5100 0000 e901 0000
    5d00 0000 1200 0000 4702 0000 0100 0000
    0000 0000 0000 0000 0200 0000 0000 0000
    0068 656c 6c6f 2077 6f72 6c64 0050 726f
    6a65 6374 2d49 642d 5665 7273 696f 6e3a
    2048 656c 6c6f 2057 6f72 6c64 2050 726f
    6a65 6374 0a52 6570 6f72 742d 4d73 6769
    642d 4275 6773 2d54 6f3a 2068 7474 703a
    2f2f 7770 706f 6c79 676c 6f74 732e 776f
    7264 7072 6573 732e 636f 6d0a 504f 542d
    4372 6561 7469 6f6e 2d44 6174 653a 2032
    3031 332d 3132 2d32 3620 3136 3a35 392b
    3039 3030 0a50 4f2d 5265 7669 7369 6f6e
    2d44 6174 653a 2032 3031 332d 3132 2d32
    3620 3137 3a30 302b 3039 3030 0a4c 6173
    742d 5472 616e 736c 6174 6f72 3a20 6d61
    7361 7975 6b69 2061 6265 203c 6d61 7361
    7975 6b69 2e61 6265 4061 6265 2e63 6f6d
    3e0a 4c61 6e67 7561 6765 2d54 6561 6d3a
    2061 6265 6368 6979 6f20 3c6d 6173 6179
    756b 692e 6162 6540 6b64 6469 2d77 6562
    2e63 6f6d 3e0a 4c61 6e67 7561 6765 3a20
    6a61 5f4a 500a 4d49 4d45 2d56 6572 7369
    6f6e 3a20 312e 300a 436f 6e74 656e 742d
    5479 7065 3a20 7465 7874 2f70 6c61 696e
    3b20 6368 6172 7365 743d 5554 462d 380a
    436f 6e74 656e 742d 5472 616e 7366 6572
    2d45 6e63 6f64 696e 673a 2038 6269 740a
    582d 4765 6e65 7261 746f 723a 2050 6f65
    6469 7420 312e 362e 330a 582d 506f 6564
    6974 2d42 6173 6570 6174 683a 202e 0a58
    2d50 6f65 6469 742d 4b65 7977 6f72 6473
    4c69 7374 3a20 5f5f 3b5f 650a 582d 506f
    6564 6974 2d53 6561 7263 6850 6174 682d
    303a 202e 2e0a 00e3 8193 e382 93e3 81ab
    e381 a1e3 81af efbc 8100 
    
    
  12. .poファイルと、.moファイルを「languages」フォルダにアップロードし、正しく表示されるか確認してください。

 

正しくHello Worldが、こんにちは!に変換されましたでしょうか?
 

完成したソースコード

<?php

/*
Plugin Name: My Hello World
Plugin URI: http://shared-blog.kddi-web.com/
Description: This is Hello World Plugin for beginner.
Version: 0.001
Author: Abechiyo
Author URI: http://shared-blog.kddi-web.com/

Copyright 25.12.2013 Abechiyo
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License, version 2, as
    published by the Free Software Foundation.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

load_plugin_textdomain
( 'my_hello', false, basename( dirname( __FILE__ ) ) . '/languages' );

add_action('admin_menu', 'add_hello_page');

function add_hello_page() {
   add_management_page
   ('Hello Worldのテスト', 'Hello Worldのテスト',8, 'Hello_World','my_hello_world_page');
}

function my_hello_world_page(){
    $message = __('hello world', 'my_hello');
    echo '<h1>'.$message.'</h1>';
}
?>
 

なかなか、Hello Worldプラグインと、多言語対応が同時に確認できるサイトがありませんでしたので、掲載させていただきました。
次回は、関数のClass化、Poeditの使い方、Pluginのアンインストール時の動作について、CurrentDatabase以外のDBへの接続方法などを紹介していきたいと思います。

 

関連リンク

Poeditを使ったWordPressの翻訳ファイル.po、.moファイル作成方法
WordPressから別のデータベースに接続する

 

 

関連タグ: 

この記事をシェアする:

Author
この記事を書いた人:阿部 正幸

KDDIウェブコミュニケーションズ
クラウドホスティング事業本部 エバンジェリスト

CPIスタッフブログ編集長。ACE01,SmartReleaseをリリース後、現職の「エバンジェリスト」として、web制作に関する様々なイベントに登場

Line@登録よろしくお願いします

Web制作に関する情報や、CPIノベルティのプレゼント、サーバーの無償提供などを定期的に発信しています。
ぜひ、登録ください。