Skip to content

WordPressのpre_get_postsとposts_where

WordPressの各ページで出力される投稿を選定するためのフィルターフックとして、pre_get_postsというのが広く使われています。
http://qiita.com/_ruka_/items/e14280d34eddf49efad1
http://emiac-works.com/coding/pre-get-posts-code-snipet/

「特定のカテゴリに入っているもの」とか「特定の執筆者のもの」とかは出せますし、「特定のカテゴリかつ特定の執筆者」も出せますが、「特定の執筆者もしくは特定のカテゴリ」といったOR検索など細かい出力はできません。

ですが、WordPressには「posts_where」という投稿出力時の細かいWHERE文を出せるフィルターフックがあります。
https://wpdocs.osdn.jp/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%AF%E3%82%A8%E3%83%AA
https://www.imamura.biz/blog/8176

// WHERE修正
function home_where( $where = '' ) {
    global $wpdb;

    // WHERE文を入れる
    $where .= "/ WHERE文をこの中に入れます。 /";

    return $where;
}

// pre_get_posts
function new_pre_get_posts($query) {
    / 管理画面,メインクエリに干渉しないために必須 /
    if( is_admin() || ! $query->is_main_query() ){
        return;
    }

    / homeの表示をカスタマイズ /
    if ( $query->is_home() ) {
        add_filter( 'posts_where', 'home_where' );
        return;
    }

}
add_action( 'pre_get_posts', 'new_pre_get_posts' );


こんな感じでfunctions.phpに挿入するといいでしょう。
実際このようなカスタマイズを最近求められて戸惑っていたのですが、こちらで何とか対応しました。

こういった方法を使えば投稿の表示をより自由自在にできるかと思います。

トラックバック

トラックバックがありません

コメント

コメント表示形式 一覧 | スレッド

コメントがありません

コメントの追加

アスタリスクで囲んだマークテキストはボールド (*強調文字*)になり、下線は _下線_ になります。
標準的な感情表現、 :-) や ;-) といったものは画像に変換します。

ロボットからの自動的なコメントスパムを防ぐために、画像の下の入力ボックスに適切な文字列を入力してください。文字列が一致する場合のみ、コメントが送信されるでしょう。ブラウザーが Cookie をサポートし、受け入れることを確認してください。さもなければ、コメントを正確に確認することができません。
CAPTCHA

Form options