web-dev-qa-db-ja.com

WP_Queryはカテゴリビューのpost_typeを無視します

カスタム投稿タイプで投稿を選択するためのクエリは次のとおりです。フロントページにいる間、これはうまく働きます(スニペットはサイドバーに含まれています)。カテゴリページで実行されるとすぐにpost_type属性は無視され、タイプ "post"の投稿が返されます。これは複数のループと関係があると思いますが、前後にwp_reset_postdata();wp_reset_query();を呼び出すことも試みました。

$customPosts = new WP_Query( array( 
    'post_type' => 'mycustomtype', 
    'posts_per_page' => 12, 
    'orderby' => 'date', 
    'order' => 'DESC', 
    'post_status' => 'publish'
));

while ( $customPosts->have_posts() ) : $customPosts->the_post(); 
    $thumbnailUrl = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), "thumbnail");
    if ( !empty($thumbnailUrl)) {
      /* echo result */ 
    }   
endwhile;   
5
david

私はあなたがここでしていることの完全な文脈を正確にはわからない。解決策はいくつかあります。

最初に、あなたが期待通りに$postにアクセスしていることを確認することです。言い換えれば、WordPressがページを構築するときに他のアクティビティの影響を受けていないことを確認してください。

$postにフローのこの時点で期待しているオブジェクトが含まれているかどうかわかりません。そしてあなたのコードを見ることから、あなたがあなた自身の用法のためにあなたが$postをどこに割り当てるかさえわかりません。

私はあなたがget_post_thumbnail_id($post->ID)を呼んでいるのに気づきました。だから、私はあなたが$customPosts->$post->IDの代わりに$post->IDを使うことによってあなたの問題を解決するかもしれないと思います。

$post$customPostに変更するという提案以外にも、私は上記のTidyの答えを解決策と考えています。

本当に、私の答えはもっと一般的です、それはそれです: あなたが変数名をクロスしないようにしてください

ある条件ではあなたのコードは動くかもしれませんが、他の条件では他の活動がその変数を変えるなら問題があるかもしれません。 $postはWordPressの他の何かによって変更することができます 簡単 (明らかに)。

たとえばカテゴリページでは、投稿はWordPressによって生成され、それ自体がグローバルな$post変数を利用します。私の経験から、私はあなたが抱えている問題であることすべてに賭けるでしょう。それから突然、ポストループのあるウィジェットがそれらのページで壊れます...

この状況でも将来でも試すことができる他のもの(ただし、それらはthe loopで呼び出す必要があります。

ループ内のthe_post_thumbnail( array(100, 100) );

または$thumb = get_the_post_thumbnail( array(100, 100) );を試す

1
aequalsb

代わりにget_posts()を使ってみましたか?

 //#get access to post settings
    global $post;
    //#set parameters for extra loop
    $args = array(
    'post_type' => 'mycustomtype', 
    'posts_per_page' => 12, 
    'orderby' => 'date', 
    'order' => 'DESC', 
    'post_status' => 'publish'
    );
    //#get posts 
    $customPosts = get_posts($args);
    //#loop through them
    foreach($customPosts as $post)
    {
        //#set all the loop functions to use data from this post
        setup_postdata($post);
        //#do what you want with the post
    }
1
Tidy

これはあなたの問題を解決するでしょう、私がこれを置くとき私はそれが完全にうまくいったとき、私は同じ問題を抱えていました。

$args = array(
     'post_type' => 'mycustomtype', 
     'posts_per_page' => 12, 
     'orderby' => 'date', 
     'order' => 'DESC', 
     'post_status' => 'publish',
     'tag' => 'mycustomtag',
     'cat' => 'mycustomcategory'
    );              

$the_query = new WP_Query( $args );
if($the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); 
0
Matthew T Rader