【WordPress】apply_filters と add_filter の使い方を理解できると便利だと思う【PHP】

  • 投稿 : 2016-11-21
自作のテーマやプラグインを作る場合に、apply_filters と add_filter の使い方を知っておくとカスタマイズしやすいように作れると思います。

・イベント登録 = フィルター登録(apply_filters)
・イベント処理登録 = フィルター処理登録(add_filter)

私は感覚的には上記のように理解して利用しています。最初はよくわからなかったのですが、使っているうちに上記のような感じの感覚が形成されて、体で覚えた感じになりました。

Wordpreeシステムで最初から登録されている「フィルター」以外に、ユーザー側で登録したいものがあれば「apply_filters」をつかうということのようです。
用意されている「フィルター」やユーザー側で追加した「フィルター」に、独自の処理を書きたい場合は「add_filter」をつかうということです。

関数リファレンス/apply filters - WordPress Codex 日本語版
関数リファレンス/add filter - WordPress Codex 日本語版

フィルター登録(apply_filters)

function wp_authenticate_username_password($user, $username, $password) {
    //
    // いろいろな処理
    //

    $user = apply_filters( 'wp_authenticate_user', $user, $password );
    if ( is_wp_error($user) )
        return $user;

    //
    // パスワードチェック
    //

    return $user;
}
Wordpressのソース「wp-includes/user.php」を見てみます。

「wp_authenticate_user」というフィルターを登録している部分です。

「apply_filters」関数は、「wp_authenticate_user」という処理が何もなければ、第2引数の「 $user」を戻り値に返すようになっています。こういう仕組みを利用して、拡張性を確保するわけです。

「wp_authenticate_user」というフィルター処理を書くと、この部分に処理を書いているのと同じことになります。

フィルター処理登録(add_filter)

add_filter( 'wp_authenticate_user', 'login_guard_authenticate_username_password', 9, 3);

function login_guard_authenticate_username_password($user, $username, $password) {

    //入力が空でなければエラーにする
    if (!empty($_POST['dummy_code'])) {
        $error = new WP_Error();

        $print_error = __('ERROR', 'login_guard');
        $empty_captcha = __('ERROR', 'login_guard');
        $error->add('login_guard', "<strong>$print_error</strong>: $empty_captcha");

        return $error;
    }
    return $user;
}

ソースを読み切れてないので、自己責任で!!・ログイン画面に、ダミーの入力項目を作成する・ダミーの入力項目に、何か入力されているとエラーにするこんな感じの動作をするプ

ブログ運営のためのブログカスタマイズ



こんな感じで、wp_authenticate_userというフィルターを利用して、独自の処理を組み込みます。
スポンサーリンク