pre_get_postsフックでmeta_queryを変える方法

Pocket

WPのquery中のmeta_queryを、pre_get_postsフックでfilterする方法
例えば、ログインしていないユーザーのみの、works投稿タイプでkey=works_disclose, value=on のもののみ表示する

function your_customized_filter($query) {
    if(!is_user_logged_in() && $query->get('post_type') == 'works' ) {
        $meta_query = $query->get('meta_query');
        if( empty( $meta_query ) ){
            $meta_query = array();
        }
        else
            $meta_query['relation'] = 'AND';
        $meta_query[] = array(
            'key' => 'works_disclose',
            'value' => 'on'
        );
     	$query->set( 'meta_query', $meta_query );
        return $query;
    }
}
add_filter('pre_get_posts', 'your_customized_filter');

フックを使うと、うっかりfilterし忘れが防止できるので、有効に使いたい。

この記事を書いた人