サポート » 使い方全般 » 指定したタグのついた投稿を1つのページに表示するには?

  • 解決済 Tadayuki

    (@tadayuki)


    指定したタグのついた投稿記事を1つのページで表示したいと思っています。

     A投稿のタイトル、記事  タグ:twitter
     B投稿のタイトル、記事  タグ:twitter
     
     Cというページ内に、
      Aタイトル
       A記事
      Bタイトル
       B記事
     を表示する。

     特定のカテゴリを1つのページに表示するショートコードを見つけ、この改造を試みたのですが、うまくいきません。

     function sc_post_list($atts, $content = null) {
    global $post;

    $cur_cat = array_shift(get_the_category());
    extract(shortcode_atts(array(
    ‘num’ => 5,
    ‘cat’ => $cur_cat->cat_ID,
    ‘format’ => ‘Y/m/d’
    ), $atts));

    $myposts = get_posts(‘numberposts=’ . $num . ‘&order=DESC&orderby=post_date&category=’ . $cat);
    $ret = ”;

    foreach ($myposts as $post) {
    setup_postdata($post);

    $content_txt = get_the_content();

    // 改行を反映
    $content_txt = preg_replace(“/\n/”,”
    “,$content_txt);

    $ret .= $content_txt;
    }
    return $ret;
    }
    add_shortcode(‘post_list’, ‘sc_post_list’);

     ご教示をいただけないでしょうか?

     

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • get_postsに渡しているcategoryというパラメタはカテゴリーのことなので、タグで絞り込んでいるわけではありません。タグで絞り込むにはcategoryではなくtagを使用してください。

    トピック投稿者 Tadayuki

    (@tadayuki)

    umbrella_processさんありがとうございます。
    説明が足りなくてすみません。上のコードは改修前のもので、実際には下のようにやってみました。ただこれだと、

    1.Warning: array_shift() [function.array-shift]: The argument should be an array in・・・が表示されてしまう
    2.記事しか表示されない

    となります。

    function sc_post_list($atts, $content = null) {
    global $post;

    $cur_tag = array_shift(get_the_tags());
    extract(shortcode_atts(array(
    ‘num’ => 5,
    ‘tagname’ => $cur_tag->name,
    ‘format’ => ‘Y/m/d’
    ), $atts));

    $myposts = get_posts(‘numberposts=’ . $num . ‘&order=DESC&orderby=post_date&tag=’ . $tagname);
    $ret = ”;

    foreach ($myposts as $post) {
    setup_postdata($post);

    $content_txt = get_the_content();

    // 改行を反映
    $content_txt = preg_replace(“/\n/”,”
    “,$content_txt);

    $ret .= $content_txt;
    }
    return $ret;
    }
    add_shortcode(‘post_list’, ‘sc_post_list’);

    4行目を
    $cur_tag = array_shift(get_the_tags($post->ID));

    だめなら
    $cur_tag = array_shift(get_the_terms($post->ID, 'post_tag'));

    でどうでしょう。

    質問をよく見ずに回答してしまいました。すいません、上の変更ではだめです。

    get_the_tags()をよく調べていないのでちょっとカン的な回答になりますが、少なくともエラーは配列ではないと言っているようなので、get_the_tags()を一度変数に代入して配列ならばarray_shiftするとか、$str[] = get_the_tags()のように強制的に配列にするとか、いづれにしてもget_the_tags()がタグが1つしかなくても配列として返してくるのか確認するべきだと思います。

    僕も質問をよく見ていませんでした。すいません。
    shokun0803さんの指摘通りでエラーがでなくなると思います

    $cur_tag[] = get_the_tags();
        extract(shortcode_atts(array(
        'num' => 5,
        'tagname' => $cur_tag[0]->name,
        'format' => 'Y/m/d'
        ), $atts));

    「記事しか表示されない」というのは、本文しか出していないのでそうだと思います。
    テンプレートタグを調べていただければ本文以外の情報も出力できます。

    トピック投稿者 Tadayuki

    (@tadayuki)

     LVP8さん、Shokun0803さん、umbrella_processさんありがとうございました。できました!
    get_the_tags()が配列と書いてあったのですが、配列ではないみたいですね。
     ご指摘のように記事タイトルなども読み込んで表示するように、いろいろ調べてみます!

     本当にありがとうございました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「指定したタグのついた投稿を1つのページに表示するには?」には新たに返信することはできません。