post ID を複数指定するのであれば、pではなくpost__inを使えばできると思います。
こんな感じで。
<?php
$args = array(
'post__in' => array(2,4)
);
query_posts($args);
?>
詳細は英語のヘルプに書いてあるようです。
http://codex.wordpress.org/Function_Reference/query_post
<?php
$related = (array) get_post_meta($post->ID, 'related', false);
query_posts('p=' . implode(',', $related) . '&posts_per_page=3');
?>
トピック投稿者
LVP8
(@lvp8)
umbrella_processさん
post__in、ご指摘ありがとうございます。はまる所を助けていただきました。
kzさん
implodeという関数を教えていただきありがとうございます。
このコードで、テンプレートのあちこちがシンプルにできそうです。
お二方のコードを参考に下記のようにしてみました。
<?php
$related = (array) get_post_meta($post->ID, 'related', false);
$aaa = '' . implode(',', $related) . '';
$args = array(
'post__in' => array($aaa),
'posts_per_page' => 3
);
query_posts($args);
?>
<ul>
<?php while (have_posts()): the_post(); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile; wp_reset_query(); ?>
</ul>
上記コードでは複数のmeta_value($related)があっても、最初の一つしか反映されません。echo にした場合は、2,4 と出力されるのですが…。
試行錯誤したのですが上手くいかなかったので、get_postsを試してみると、こちらは希望通りの結果となりました。
$related = (array) get_post_meta($post->ID, 'related', false);
$myposts = get_posts('include='.implode(',',$related).'&numberposts=3');
できればquery_postsを使いたいのですが、間違った認識やコードが含まれているのでしょうか。
query_postsのpost__inには配列のまま渡せるはずです。
未検証ですがこれで動かないでしょうか?
<?php
$related = (array) get_post_meta($post->ID, 'related', false);
$args = array(
'post__in' => $related,
'posts_per_page' => 3
);
query_posts($args);
?>
トピック投稿者
LVP8
(@lvp8)
umbrella_processさん
ご提示いただいたコードで希望通りの表示ができました。ありがとうございます。
post__inには配列のまま渡せるはず
これが理解できていないので悩んでしまいましたが、今回のトピックで色々学習できました。
umbrella_processさん、kzさん、アドバイスありがとうございました。