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に挿入するといいでしょう。
実際このようなカスタマイズを最近求められて戸惑っていたのですが、こちらで何とか対応しました。
こういった方法を使えば投稿の表示をより自由自在にできるかと思います。
コメント
コメント表示形式 一覧 | スレッド