• 解決済 nagatan

    (@nagatan)


    いつもお世話になっています。
    初めて質問させていただきます。

    現在、特定カテゴリーの記事(例:cat_ID=9)と特定のページ(例:page_id=15)の「子ページ」の最新記事一覧を取得したいと考えております。
    Wordpress Codexのget_posts()を参考に下記のように書いてみましたが、うまく取得できません。

    <ul>
    <?php
    $news_li = get_posts('numberposts=5&post_type=any&post_parent=15&category=9);
    if(!$news_li) echo '<li>現在お知らせはありません。</li>';
    ?>
    <?php foreach($news_li as $post): setup_postdata($post);?>
    <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a> [ <?php the_time('Y.n.j') ?> ]</li>
    <?php endforeach; ?>
    </ul>

    どこか記述がまちがえているのでしょうか?
    ご教授いただけたら幸いです。

    ちなみに、
    get_posts('numberposts=5&post_type=any&post_parent=15)
    だとページの一覧は正常に表示されます。
    get_posts('numberposts=5&post_type=any&category=9)
    では投稿の一覧が正常に表示されます。
    get_posts('numberposts=5&post_type=any)
    ですと、ページ、投稿すべてが正常に表示されます。

    そもそも、ページと投稿を一緒にすること自体、やめたほうがいいのでしょうか?

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • post_parentを入れてしまうと投稿が配列に入ってこないようです。
    試してみましたが、

    $postslist = get_posts('post_type=any');
    print_r($postslist);

    この状態で全ての投稿及びページが入ってくるのに対し、

    $postslist = get_posts('post_type=any&post_parent=15');
    print_r($postslist);

    これではページしか拾いませんでした。
    post_parentは0で全て表示(デフォルト)で、親のない投稿はpost_parent=0なのでpost_parent=15とすれば表示されないのは当然なのですが、category=9は有効なので

    $postslist = get_posts('post_type=any&category=9');
    print_r($postslist);

    として取得し、投稿([post_type] => post)及びページの子([post_parent] => 15)だけ表示としてみてはどうでしょう?

    <?php
    $postslist = get_posts('post_type=any&category=9');
    foreach($postslist as $post): setup_postdata($post);
    if( $post->post_type == "post" || $post->post_parent == 15 ):
    ?>
    <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a> [ <?php the_time('Y.n.j') ?> ]</li>
    <?php
    endif;
    endforeach;
    ?>

    どうかな?

    モデレーター jim912

    (@jim912)

    nagatanさん、shokun0803さん、こんにちは。

    WordPressのテンプレートタグで双方を満たす記事を一括で取得することは残念ながらできません。というのもそれぞれの指定がAND検索になってしまうため、post_type=anyとしても、category=9を指定した時点で全てのページが対象外になってしまい、post_parent=15を指定した時点で全ての投稿が対象外となってしまうためです。

    これを解決するには、それぞれの条件でget_postsを2回行い、マージさせることもできますが、一番良いのは、オリジナルのクエリーで一括取得する方法になるかと思います。
    下記のコードでは、

    • cat_ID=9の投稿またはpage_id=15を親ページとするページ
    • 公開されている
    • 公開日の新しい順
    • 最新の5記事

    を取得しますので、概ねご希望通りの結果となるはずです。
    ただし、子カテゴリーは含めていませんので、これも合わせて取得する場合は、さらに工夫する必要があります。

    $news_li = $wpdb->get_results( "
    SELECT DISTINCT p.*
    FROM	$wpdb->posts as p,
    	$wpdb->term_relationships as r
    WHERE	p.ID = r.object_id
    AND	( (
    	p.post_type = 'page'
    AND	p.post_parent = 15
    	)
    OR	(
    	p.post_type = 'post'
    AND	r.term_taxonomy_id = 9
    	) )
    AND	p.post_status = 'publish'
    ORDER BY post_date DESC
    LIMIT	5" );
    トピック投稿者 nagatan

    (@nagatan)

    shokun0803さま、jim912さま

    丁寧なご回答ありがとうございます!!
    jim912さまのコードで、動作確認できました。

    ページとカテゴリーは別物となってしまうんですね。
    勉強になりました。
    ほんとうにありがとうございました。<(_ _)>

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「特定カテゴリーの記事と特定のページの「子ページ」の最新記事一覧を取」には新たに返信することはできません。