1. HOME
  2. 開発・ブログ運営
  3. WordPress
  4. WordPress の機能を拡張したい場合、functions.php と プラグイン はどうやって使い分けるのか?
2012年07月27日
WordPress に XML-RPC を使って、外部から記事 ...
2013年12月09日
プラグインを使わずに WordPress でパンくずリストを設 ...
2012年05月23日
タグクラウド(標準ウィジェット)の文字サイズを変えてみた ...
2014年08月05日
Google ウェブマスターツールで指摘された内容を修正してみ ...
2012年02月12日
WordPress3 のテーマを変更しました
2013年12月09日
注意!WPtouch を 3.1.1 へアップデートしたらレイ ...

WordPress の機能を拡張したい場合、functions.php と プラグイン はどうやって使い分けるのか?

WordPress では機能を拡張する場合、プラグインを用いる方法と、functions.php に記述する方法がありますが、プラグインで実装するのか functions.php に記述するのかどちらが良いのだろうか?

というかそもそもプラグインで実装するのと funciotns.php に記述するのと何が違うのか?

先日エントリした自作プラグインは、内容をそのまま全コピーして、functions.php に張り付けても動きます。

逆に、functions.php に書かれていることを別ファイルにして、ファイルの先頭にそのファイルがプラグインだよと WordPress に伝えるためのコメントを

/**
Plugin Name: プラグインの名前
*/

とつけてあげればプラグインとして動作します。(一部例外があります:後述)

ということは、functions.php も常に読み込まれる一種のプラグインとして理解しても良いのかな?ってことでちょっと調べてみました。

pluggable.php の存在

functions.php とプラグインでは読み込まれるタイミングが違うようです。順序としてはプラグインが先。っで、(ここ重要)プラグインが読み込まれて functions.php が読み込まれる間に、pluggable.php というファイルが読み込まれるようです。

つまり、読み込み順序としては、

1. プラグイン
2. pluggable.php
3. functions.php

となる。

ってことは、pluggable.php で定義されている関数を利用したプラグインはそのままでは実装できないと。(プラグインが読み込まれる時点では pluggable.php が読み込まれていないため、pluggable.php の関数を利用した時点で、その関数は定義されていませんとエラーが出る)

pluggable.php は require_once() してはいけない

そうは言っても pluggable.php で定義されている関数を利用したプラグインを実装したい、という場合は、プラグインから pluggable.php を require_once する人が多いみたいです。

でもこれはダメ。間違った使い方らしい。

pluggable.php で定義されている関数はオーバーライドされることが前提だから、require_once するんじゃなくてオーバーライドすることが正しい使い方なんだとか。

参考:wp-includes/pluggable.phpをrequire_onceしちゃ駄目という話

なるほど。

ちなみに、pluggable.php は何をしているのか?ということで、定義されている関数を見ると、

function wp_set_current_user($id, $name = ”)
function wp_get_current_user()
function get_currentuserinfo()
function get_userdata( $user_id )
function get_user_by( $field, $value )
function cache_users( $user_ids )
function wp_mail( $to, $subject, $message, $headers = ”, $attachments = array() )
function wp_authenticate($username, $password)
function wp_logout()
function wp_validate_auth_cookie($cookie = ”, $scheme = ”)
function wp_generate_auth_cookie($user_id, $expiration, $scheme = ‘auth’)
function wp_parse_auth_cookie($cookie = ”, $scheme = ”)
function wp_set_auth_cookie($user_id, $remember = false, $secure = ”)
function wp_clear_auth_cookie()
function is_user_logged_in()
function auth_redirect()
function check_admin_referer($action = -1, $query_arg = ‘_wpnonce’)
function check_ajax_referer( $action = -1, $query_arg = false, $die = true )
function wp_redirect($location, $status = 302)
function wp_sanitize_redirect($location)
function wp_safe_redirect($location, $status = 302)
function wp_validate_redirect($location, $default = ”)
function wp_notify_postauthor( $comment_id, $comment_type = ” )
function wp_notify_moderator($comment_id)
function wp_password_change_notification(&$user)
function wp_new_user_notification($user_id, $plaintext_pass = ”)
function wp_nonce_tick()
function wp_verify_nonce($nonce, $action = -1)
function wp_create_nonce($action = -1)
function wp_salt($scheme = ‘auth’)
function wp_hash($data, $scheme = ‘auth’)
function wp_hash_password($password)
function wp_check_password($password, $hash, $user_id = ”)
function wp_generate_password( $length = 12, $special_chars = true, $extra_special_chars = false )
function wp_rand( $min = 0, $max = 0 )
function wp_set_password( $password, $user_id )
function get_avatar( $id_or_email, $size = ’96’, $default = ”, $alt = false )
function wp_text_diff( $left_string, $right_string, $args = null )

こんな感じ。ユーザー情報の取得や変更とかをする(と思われる)関数を良く使うのでしょうか。

なお、WordPress のドキュメントにはオーバーライドできる関数の一覧があります。それ以外はオーバーライドできない(しちゃいけない)のかな。

参考:プラグイン API – WordPress Codex 日本語版

っで結局 functions.php とプラグインは何が違うのか?

結論から言えば、よくわかりません。

pluggable.php のことだけ頭に入れておけば別にどっちでもいいんじゃないのって感じ。

functions.php に書くと使いまわすのに不便とか、プラグインはいちいち有効にしたりとか面倒くさいとか、それぞれ一長一短なので、目的に応じて使い分ければいいのかと。

一般的には、汎用性のないもの(そのブログ特有なもの)は functions.php に、それ以外はプラグインで、ってことになるのでしょうか。

でわでわ







「WordPress の機能を拡張したい場合、functions.php と プラグイン はどうやって使い分けるのか?」に頂いたコメント & トラックバック

  1. […] 参考:http://dev.ontheroad.jp/archives/903   :http://codex.wordpress.org/Function_Reference/wp_generate_password カテゴリー: wordpress   作成者: envy パーマリンク […]

この記事にコメントする





Copyright © 2012 - 2014 MacBook Air とWordPressでこうなった All rights reserved
Powered by WordPress.