なぜアクションフックやフィルターフックが使われるのか?
Wordpressではあらかじめdo_actionやapply_filtersが設定されています。
例えば、WP_Queryクラスのget_resultsメソッドでは「pre_get_posts」というアクションフックが用意されています。これは、クエリの実行直前に、なんらかの処理を追加したい場合を見越して行われています。
もし、投稿の表示順を新しい順から古い順に変更したい場合には、functions.php内で以下の処理を書き加えます。
function change_order( $query ) {
// 現在表示しているページが管理者用ページ
// または、現在実行中のWP_Queryがメインクエリで無い場合
if ( is_admin() || ! $query->is_main_query() ) {
// 何も処理を行わない。
return;
}
//ここで変更したいページを指定
// 今回はブログのメインページで処理を行う
if ( $query->is_home() ) {
//古い順
$query->set( 'order', 'ASC' );
}
}
add_action( 'pre_get_posts', 'change_order' );
(index.phpのメインループで全投稿のタイトル、本文、投稿日を出力するようなシンプルなテンプレートを用意して、お試しください。)
このようにして、「元のファイルに一切手を加えずに」WP_Queryのオブジェクトに処理を追加する」ことが可能です。このような仕組みを、「プラグイン(日本語で「差し込み」)処理」と呼びます。テーマファイルのfunctions.phpや、専用のプラグインを作成したりして、プラグイン処理を行います。 (index.phpが読み込まれる段階ではすでに多くのアクション・フィルターが実行済みになっています。実行済みの関数に処理を追加しても無意味になってしまう為、functions.phpで設定を行うようにしましょう。)