WordPressのホームページ(トップページ)で出現記事の絞り込みを行いたい。
条件
特定のカテゴリを除外 かつ タグが登録されている記事
使用中のテーマのindex.phpの?php get_header(); ?の下に、以下のコードを挿入すればカテゴリの絞り込みは簡単にできる。
<?php if (is_home()) { query_posts("cat=-5"); } ?>
が、さらに絞り込み、タグが登録されている記事のみを表示させる方法が分からない。
恐らくタクソノミー引数を使えばできそうなのだが、どうも良く理解できない。
調べていると、使用中のテーマのfunctions.phpにフィルター処理(add_filter)することで、絞り込みをできるらしい。SQLなら分かるし、query_postsを呼ぶより早いらしい。
もうquery_postsは呼ばない:WordPress私的マニュアル
Plugin API/Filter Reference/posts where « WordPress Codex
上の二つのリンクを参考にして出来上がったのが下記で、上手く動いている。
add_action( 'after_setup_theme', 'mytheme_setup' );
function mytheme_setup() {
add_filter( 'posts_where', 'posts_where' );
}
function posts_where($where){
global $wp_query;
if ( $wp_query->is_home ) {
global $wpdb;
$where .= " AND NOT ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id IN (12) )";
$where .= " AND ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id IN (SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = 'post_tag' ) )";
}
remove_filter( 'posts_where', __FUNCTION__ );
return $where;
}