Nullyのぶろぐ

仙台から東京へ転勤したエンジニアのブログ

WordPressのプラグインを作る際に覚えておくと便利な関数まとめ

WordPressの便利機能のひとつであるプラグイン

このプラグインを自作する際に覚えておくと後でお得ですよ!奥さん!な関数をまとめてみました。

plugin_basename($file)

プラグインのベースファイル名を取得します。

以下の例は/home/www/wp-content/plugins/myplugin/myplugin.phpというファイルがあった場合の例です。

$basename = plugin_basename(__FILE__);

echo $basename; // myplugin/myplugin.php

plugins_url([$path[, $plugin]])

WordPressをインストールしたwp-content/plugins/へのURLを取得します。

$pathにファイルへのパスを指定すると、指定したパスへのURLを取得できます。

$pluginは基本的には自前で作成するプラグインファイルを指定します。

 

// wp-content/plugins/へのURLを取得します

$url = plugins_url();

// mypluginディレクトリのsample.cssへのURLを取得します

$url= plugins_url("sample.css", __FILE__);

 

register_activation_hook($file, $function);

プラグインが有効化された時のみ呼び出されるアクションを登録します。

$fileにはプラグインへのディレクトリパス(ファイル名込み)、$functionには有効化した際に呼び出される関数を指定します。

// プラグインが有効化されたときのみ、プラグインで利用するオプションを追加します

register_activation_hook(__FILE__, "my_register_hook");

function my_register_hook() {

update_option("my_option_name", "my value");

}

register_deactivation_hook($file, $function)

プラグインが無効化された時のみ呼び出されるアクションを登録します。

$fileにはプラグインへのディレクトリパス(ファイル名込み)、$functionには無効化した際に呼び出される関数を指定します。

// プラグインが有効化された時のみ、有効化した際に追加したオプションを削除します

register_deactivation_hook(__FILE__, "my_deregister_hook");

function my_deregister_hook() {

delete_option("my_option_name");

}

register_setting($option_group, $option_name, $sanitize_callback)

プラグインの設定画面のオプショングループを登録します。

1つの入力フィールドにつき1回呼び出します。

$option_groupは登録するオプションのグループ名を指定します。

$option_nameはグループに登録するフィールドの名前を指定します。

$sanitize_callbackはフィールドの値をサニタイズするコールバックを指定します。

 

add_action("admin_init", "register_my_option_fields");

function register_my_option_fields() {

// my_optionsというオプショングループにそれぞれフィールドを登録する

register_setting("my_options", "my_option_username", "esc_attr");

register_setting("my_options", "my_option_nicename", "esc_attr");

}

// プラグイン等の管理画面を表示する関数

function my_admin_page() {

// options.phpには特別なコードがかかれています。

// wp-admin/options.phpにあります。

<form action="options.php" method="post">

<?php settings_fields("my_options"); ?>

// register_my_option_fields で登録したフィールド名と同じ名前を指定することに注意!

<p><input type="text" name="my_option_username" value="<?php get_option('my_option_username'); ?>" /></p>

<p><input type="text" name="my_option_nicename" value="<?php get_option('my_option_nicename'); ?>" /></p>

</form>

}

 

settings_fields($option_group)

settings_fieldsは$option_groupで登録したグループ名のnonceフィールドを生成します。

これにより、プラグインオリジナルの管理画面をより作りやすくなります。

unregister_setting($option_group, $option_name, $sanitize_callback = null)

register_settingで登録した設定項目を削除します。

// 上で登録したmy_optionsのmy_option_usernameを削除します

unregister_setting("my_options", "my_option_username");

menu_page_url($menu_slug, $echo = true)

指定した$menu_slugをもとに、メニューページへのURLを表示及び取得します。

指定された$menu_slugに属するURLが存在しなければ、空文字が返却されます。

// my_options というスラッグをもとにURLを取得します

$url = menu_page_url("my_options", false);

has_filter($tag, $function_to_check = false)

指定した$tagのフィルターが存在するかをチェックします。

$function_to_checkに文字列を指定すると、指定した$tagのフィルターに$function_to_checkが存在しているかをチェックします。

 

// the_contentタグは登録されているので true と表示される

var_dump(has_filter("the_content"));

// the_unkタグは登録されていないのでfalseと表示される

var_dump(has_filter("the_unk"));

// the_contentタグにdo_shortcode関数が登録されているので、登録時の優先度が表示される

var_dump(has_filter("the_content", "do_shortcode"));

// the_contentタグにdo_unk関数は登録されていないのでfalseと表示される

var_dump(has_filter("the_content", "do_unk"));

 

add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1)

指定したフィルタータグに新しいフィルターを登録します。

$priorityの初期値は10でこの数値が小さいほど優先的に実行されます。

$accepted_argsは登録したフィルタで許可する引数の数を指定します。

// the_contentタグに優先度を0、許可する引数の数を3として、output_hello_world関数を登録します

add_filter("the_content", "output_hello_world", 0, 3);

aplly_filters($tag, $value[,$var...])

指定した$tagのフィルタを適用させます。

$value以降の引数はいくつでも指定することができますが、add_filter関数にて登録された各関数の$accepted_args以上の引数の数は無視されます。

 

// the_contentタグに登録されたフィルターを、文字列「サンプル」に適用させます

apply_filters("the_content", "サンプル");

// the_example_filterタグに登録されたフィルターを、文字列「サンプル」に適用させ、

// 投稿の内容をフィルターの引数として指定します

apply_filters("the_example_filter", "サンプル", get_the_content());

 

current_filter()

現在実行されているフィルタ及びアクションの名前を取得します。

利用用途としては、同じ関数を複数のフィルターポイントに登録してあり、switchなどで分岐する際に利用します。

add_filter("the_content", "my_example_filter");

add_filter("wp_exceprt", "my_example_filter");

function my_example_filter() {

switch(current_filter()) {

case "the_content":

// the_contentフィルタの場合の処理

break;

case "the_excerpt":

// the_exceprtフィルタの場合の処理

break;

}

}

remove_filter($tag, $function_to_remove, $priority = 10, $accepted_args = 1)

指定した$tagに登録したフィルター関数$function_to_removeを削除します。

削除に成功すればtrueを返却し、失敗した場合はfalseを返却します。

 

// the_contentに登録されている自動的に段落をつけてくれるフィルタ関数を削除します

remove_filter("the_content", "wpautop");

// クラスオブジェクトのフィルタ関数を削除する場合は以下のように配列で指定します

remove_filter("the_content", array( $myClass, "my_filter" ));

 

remove_all_filters($tag, $priority = false)

指定した$tagのフィルターを削除します。

$priorityに数値を指定した場合は、$tagに登録された優先度$priorityのフィルタのみ削除されます。

 

// the_contentタグのフィルターを全て削除します

remove_all_filters("the_contnet");

// the_contentタグの優先度が20に指定されているフィルターを全て削除します

remove_all_filters("the_content", 20);

 

has_action($tag, $function_to_check = false)

指定した$tagのアクションが存在するかチェックします。

$function_to_checkに文字列を指定すると、$tagのアクションに登録された関数$function_to_checkが存在するかをチェックします。

内部構造はhas_filterと同等です。

 

// wp_headアクションが存在しているかチェックします

has_action("wp_head");

// wp_headアクションに関数名my_head_actionが存在しているかチェックします

has_action("wp_head", "my_head_action");

 

 add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1)

指定したアクション$tagに関数$function_to_addを追加します。

$priorityに小さい数を指定することで優先的に実行されます。

$accepted_argsは登録するアクションで利用可能な引数の数を指定します。

 

// wp_headアクションにmy_head_actionを登録します

add_action("wp_head", "my_head_action");

// wp_headアクションに優先度を2、許可する引数の数を3として

// my_head_action関数を登録します

add_action("wp_head", "my_head_action", 2, 3);

 

do_action($tag, $arg[,$arg_2...])

指定したアクション$tagに登録された関数を実行します。

$argは配列及びカンマ区切りで複数の引数を指定することが可能です。

また、$argにはオブジェクトを指定することも可能です。

 

// my_custom_headアクションに登録した関数を実行します

do_action("my_custom_head");

// my_custom_headアクションに登録した関数を引数つきで実行します

do_action("my_custom_head", array( "name" => "Nully" ));

// または

do_action("my_custom_head", "Nully");

 

do_action_ref_array($tag, $arg)

指定したアクション$tagに登録された関数を実行します。

$argは配列のみ指定可能です。

// my_custom_headアクションに登録した関数を引数付きで実行します

do_action_ref_array("my_custom_head", array( "name" => "Nully", "age" => "永遠の20歳" ));

did_action($tag)

現在実行されているアクションが$tagかチェックします。

// 現在実行されているアクションがwp_headの場合はtrue

// それ以外はfalseを返却します

var_dump(did_action("wp_head"));

remove_action($tag, $function_to_remove, $priority = 10, $accepted_args = 1)

指定したアクション$tagに登録した関数$function_to_removeを削除します。

$priorityはアクションに登録した数値を指定する必要があります。

// wp_headに登録されたmy_custom_headを削除します

remove_action("wp_head", "my_custom_head");

remove_all_actions($tag, $priority = false)

指定したアクション$tagを削除します。

$priorityに数値を指定することで$tagに登録された優先度$priorityのアクションを削除します。

 

// wp_headに登録されたアクションを全て削除します

remove_all_actions("wp_head");

// wp_headに登録された、優先度が20のアクションを全て削除します

remove_all_actions("wp_head", 20);

終りに

ショートコード周りはすっ飛ばしました。

時間があれば、近いうちにショートコードに関する関数のまとめっぽいものを書きたいと思います。