web-dev-qa-db-ja.com

カスタム分類法のフィルタリング

これはWordPressフォーラムからのクロスポストです。申し訳ありませんが、1週間近く経っても何の反応もないので、ここに誰かが助けてくれることを願っています。どちらかの場所で返信があった場合は、リンクを付けて投稿を更新します。

私は自分のクライアントのカスタムテーマに機能を拡張しようとしています、そしてカテゴリによってフィルターされたカスタム分類のリストを引き出すquery_posts()を得ようとしている問題を抱えています。 functions.phpのカスタム投稿タイプの作成はこれです:

//Custom Post Types
add_action('init', 'create_myportfoliotype');
function create_myportfoliotype() {
    $myportfoliotype_args = array(
        'label' => __('Portfolio'),
        'singular_label' => __('Portfolio'),
        'public' => true,
        'show_ui' => true,
        'menu_position' => 5,
        'capability_type' => 'post',
        'hierarchical' => false,
        'publicly_queryable' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'portfolio', 'with_front' => false ),
        'can_export' => true,
        'supports' => array(
            'title', 
            'editor', 
            'post-thumbnails',
            'custom-fields',
            'page-attributes',
            'author',
            'thumbnail'
          )
       );
  register_post_type('myportfoliotype',$myportfoliotype_args);
}


//Taxonomias
register_taxonomy("categories", array("myportfoliotype"), array("hierarchical" => true, "label" => "Category", "singular_label" => "Category", "rewrite" => true));
register_taxonomy( 'tags', array("homepage"), array( 'hierarchical' => false, 'label' => 'Tags', 'query_var' => true, 'rewrite' => true ) );
register_taxonomy( 'specifics', array("myportfoliotype"), array( 'hierarchical' => false, 'label' => 'Specifics', 'query_var' => true, 'rewrite' => true ) );

現在、このサイトにはすべての投稿を取り込んでからjqueryを介して表示される内容を除外するページがあります。投稿を引​​き込むクエリは次のとおりです。

query_posts( array( 'post_type' => 'myportfoliotype', 'paged' => $paged, 'posts_per_page' => 80))

これはうまくいきますが、私が言ったようにすべてを引き込みます。彼らが今欲しいのは、それぞれ2つの特定のカテゴリのみを取り込む2つのカスタムテンプレートです。この場合は視覚的には機能しないので、jqueryによるフィルタリングはできません。私は2つのカテゴリーだけを取り込もうとしていますが、何らかの理由で次のコードのバリエーションは機能しないようです。

query_posts( array( 'post_type' => 'myportfoliotype', 'paged' => $paged, 'posts_per_page' => 80, 'tag_id' => '9' ))

私が試したことはすべて、まだすべての投稿を引き込むか、またはいずれも引き込まないことです。

ps。 query_postsが生成した生のクエリをダンプする関数について誰かが知っていますか?実際にクエリを実行したときの変化をwp_postmetaの情報と比較してみると、問題の原因を突き止めるのに役立ちます。

6

これはよくある質問ではありませんが、 Codexを注意深く読む必要があります。特にWP_Queryのtax_query部分

あなたの提案されたquery_posts呼び出しは間違っています。これは次のようになります。

query_posts( array(  
    'post_type' => 'myportfoliotype', 
    'paged' => $paged, 
    'posts_per_page' => 80, 
    'tax_query' => array( 
        array( 
            'taxonomy' => 'category', //or tag or custom taxonomy
            'field' => 'id', 
            'terms' => array('9') 
        ) 
    ) 
) );

さらに、DBクエリをより効率的に使用するには、query_postsの代わりに pre_get_posts hook を使用することを検討してください。

12
david.binda