• 解決済 LVP8

    (@lvp8)


    カスタムフィールドを使って関連記事を表示させるため、relatedというmeta_keyを作り、meta_valueにその投稿に関連する他の記事のIDを入力して実現させたいのですが、複数のmeta_value時の処理方法でつまづいています。

    <?php
    $related = get_post_meta($post->ID,'related',false);
    if($related) {
    foreach ($related as $value) {
    echo ''.$value.'';
    if (end($related) != $value) {
    echo ',';
    }}}
    ?>

    こうする事で、2,4 などとカンマ区切りで出力できたのですが、この 2,4 を関連記事を表示する下記に代入する方法がわかりません。

    query_posts(‘p=ここにいれたい&posts_per_page=3′);

    もっと簡単な方法でできるのであれば、この方法にこだわりません。
    また、もしかしたら初歩的な質問なのかもしれませんが、ご教授いただければ幸いです。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • 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);
    ?>

    よく見たらヘルプのリンクが間違ってました、スミマセン。
    http://codex.wordpress.org/Function_Reference/query_posts

    トピック投稿者 LVP8

    (@lvp8)

    umbrella_processさん
    ご提示いただいたコードで希望通りの表示ができました。ありがとうございます。

    post__inには配列のまま渡せるはず

    これが理解できていないので悩んでしまいましたが、今回のトピックで色々学習できました。
    umbrella_processさん、kzさん、アドバイスありがとうございました。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「meta_keyにある複数のmeta_valueをquery_postsに代入したい」には新たに返信することはできません。