なぜアクションフックやフィルターフックが使われるのか?

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で設定を行うようにしましょう。)

results matching ""

    No results matching ""