こんにちは、今回はワードプレスをカスタマイズするのに非常に重要な機能フック(add_action)について解説してみようと思います
Pemaquid Lighthouse and Cliffs; Maine, USA

ワードプレスのフックとは?

ワードプレスのフックとは、簡単に言えば、ワードプレスが様々な機能を実行しようとするとき(例えば投稿を保存するとき等)に自分のオリジナルな機能を挟み込んでワードプレスに実行してもらう機能です。
フックの基本的な書き方は下記のような形をとります。

function email_postupdate( $post_ID )  {
   $friends = 'aaa@example.org, bbb@example.org';
   wp_mail( $friends, "私のブログがアップデートされました", 'ブログのURLはこちら: http://blog.example.com' );

   return $post_ID;
}
add_action( 'publish_post', 'email_postupdate' );

この関数は、オリジナルなプラグインに記載してもかまいませんし、テーマ(管理画面、外観→テーマの編集)のfunctions.phpに記載しても動作します。
それでは、この事例のそれぞれのプログラムについて解説し、フック関数の基本について解説いたします。

add_action( ‘publish_post’, ’email_postupdate’ );

add_actionは、フックを使うときに必ず必要になる記載です
publish_postという部分がワードプレスがどのような処理をするときにオリジナルな関数を実行するかを指定する部分です。この例のpublish_postとは、「ブログの記事が公開される瞬間」を意味します
email_postupdateは任意の名称で、上部のfunction email_postupdateの名称と同じでなければいけません。この関数の中身がブログの記事が公開される瞬間に実行されます
$post_ID publish_postフックでは、関数にその記事のIDが渡されますので、自分の関数を実行した後はreturn $post_ID;でワードプレスに記事IDを返却しなければ行けません。

このプログラムは、ブログの記事が公開される瞬間に2行目で指定したメールアドレスに更新をお知らせするフックです。フックは好きなタイミングで下記のようなプログラムで削除する事ができます

remove_action( ‘publish_post’, ’email_postupdate’);

フック(add_action)で出来る事

フック(add_action)で出来る事はなんでしょう?ワードプレスのフックの種類はなんと数千種類もり、ありとあらゆるワードプレスの実行機能の前に好きなコードを挟み込む事が出来ます。投稿や、固定ページの機能拡張だけでなく、管理画面やエディタ、プラグイン、ユーザー追加関連などすべてのワードプレスの機能を拡張したり、制限したり、カスタマイズしたりする事が可能だと言っても過言ではありません。この高い拡張性がワードプレスが人気な点の一つなのです

フック(add_action)の簡単なコード例

管理画面にプラグインのオプションメニューを追加します

function register_my_menu() {
   add_menu_page( 'AAAプラグインのオプションタイトル', 'AAAプラグインのオプション', 'manage_options', 'myplugin/myplugin-optionpage.php', '', 'dashicons-admin-site', 80 );
}
add_action( 'admin_menu', 'register_my_menu' );

投稿記事の保存時にタイトルを強制的に変更します

function modify_title( $data , $postarr )
{
  if($data['post_type'] == 'post') {
    $data['post_title'] = '新タイトル';
  }
  return $data;
}
add_filter( 'wp_insert_post_data' , 'modify_title' , '99', 2 );

全てのページのヘッダーにメタデスクリプションを追加します

function addmetadescript () {
	echo '';
}
add_action( 'wp_head', 'addmetadescript' );

bodyタグに任意のクラスを追加します

function my_body_class( $classes) {
  $classes[] = 'class-name';
   return $classes;
}
add_filter('body_class','my_body_class');

特定のページをトップページにリダイレクトします

function wp_redirect_sample() {
    $current_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    if($current_url == 'http://example.com/?p=4555') {     
      exit(wp_redirect( home_url( '/' )));
    }
}
add_action( 'template_redirect', 'wp_redirect_sample');

カテゴリーページのタイトルを変えます

function change_c_title( $title ) {
    if( is_category() ) {
        $title = "ワードプレスのカテゴリー:".single_cat_title('', false );
    }
    return $title;
};
add_action( 'get_the_archive_title', 'change_c_title');

他にも数千個のフックがワードプレスにはあります。
http://adambrown.info/p/wp_hooks/hook
よりほぼ全てのフックのリストを確認する事が可能です

funttion.phpを編集するときはご注意ください

この解説の内容を実験されたり独自の関数をfunction.phpに追加されるときは、そのコードにエラーが無いかを特に慎重に確認されて追加される事をお勧めします。といいますのも、コードにエラーがあるとその他の関数まで巻き込んでワードプレス全体がエラーを引き起こして真っ白になってしまう事がよくあるからです。バックアップをとるか、コードの追加前に下記のようなサイトで、PHPにエラーが無いかを確かめてから作業をされてくださいね

PHPエラーチェッカー

WordPressのカスタマイズのご依頼はWPドクターまでお気軽にどうぞ