web-dev-qa-db-ja.com

同じクエリで複数の投稿タイプを表示できません(WPML WP_Query)

これについては非常に簡単な説明があるはずですが、私は行き詰まっています。私は、サイトのフロントページにニースのシンプルな最近の投稿要素を追加しようとしています。それは、何らかの理由で、使用しようとしたときです。

$args = array( 
    'post_type' => array('post','recipes'), 
    'posts_per_page' => 4
);
query_posts( $args );
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    ...

endwhile; 
wp_reset_postdata(); 

レシピは表示されません。奇妙なことに、 'post'と 'page'を呼び出した場合、両方が表示されますが、 'recipes'を追加するとすぐに、レシピではない最初に要求されたタイプが表示されるだけです。ここに簡単なものがないのですか?

編集する

Query_postsの代わりにWP_Queryインスタンスを使用して更新しましたが、まだ機能しません。

$argz= array(
'post_type' => array('post','recipes'), 
'posts_per_page' => 4
);

$my_query = new WP_Query($argz);

まだ動作しません。それでも正しいクエリvarとすべてを返しますが、両方の投稿タイプを表示しません。

2
Rich

私はWP_Queryを使用して、2つのカスタム投稿タイプを照会することでこの問題を抱えていました。配列内のどちらか一方の型に対してクエリを実行しても問題ありませんでしたが、両方を同時に実行することはできませんでした。

動作しませんでした:

$args = array( 
    'post_type' => array('custom_type_1','custom_type_2'), 
    'posts_per_page' => 4
);

仕事でした:

$args = array( 
    'post_type' => array('custom_type_1'), 
    'posts_per_page' => 4
);

仕事でした:

$args = array( 
    'post_type' => array('custom_type_2'), 
    'posts_per_page' => 4
);

控えめに言ってもひどく混乱します。

両方のカスタム投稿タイプにWPMLの[カスタム投稿タイプ名を翻訳可能にする]チェックボックスがあることを確認することで問題を解決しました。 WPMLは、一方が翻訳可能で他方がそうではない2つの投稿タイプについて照会しようとした場合、それを好まないでください。

(私はWordPress 3.4.1とWPML 2.5.2を使っています - この記事の執筆時点で最新のものです)

3
Michael Cox
  1. 二次ループにquery_postsを使用しないでください。
    これは一般的な「ベストプラクティス」の推奨事項であり、問​​題の原因ではありません。
  2. 投稿タイプを登録するときは、'public' => trueを確認してください
  3. 以下をテンプレートのどこかに置き、出力を報告してください。登録された各カスタム投稿タイプのオブジェクトを返し、正しい名前を使用しているかどうか、またpublicがtrueに設定されているかどうかを確認します。

    $post_types = get_post_types( array( '_builtin' => false ), 'object' ); foreach ( $post_types as $post_type ) { var_dump( $post_type ); }

2
Chris_O

ワオ。その原因が何であるかは正確にはわかりませんが(実際にはさらに掘り下げます)、WPMLに関することで、実際のSQLクエリが標準の投稿やページと組み合わせてカスタム投稿タイプを要求するのを妨げているようです。 WPMLを無効にしたときはうまくいきました。みんなの助けてくれてありがとう - 何が起こったのかについてもっと具体的な考えが分かれば私はこの問題をフォローアップするつもりです

1
Rich

これは、複数の投稿タイプを照会するのに役立ちます。

query_posts('post_type[]=post&post_type[]=page&post_type[]=event');

ブラウザで直接テストすることもできます。

example.com/?post_type[]=post&post_type[]=page
1
Rune