サポート » 使い方全般 » ショートコードの記述方法について

  • お世話になっております。
    ただいま固定ページの記事本文内に新着情報のリストを作っているのですが
    初めてショートコードを用いているため、
    構文構造?(単純にhtmlレベルなのかも知れませんが)が誤っており、
    うまく出力されません。

    ショートコードを記述し、

    <dl>
    <dt></dt>
    <dd></dd>
    </dl>

    このコードを複数回出力しようとしています。

    □実現したい状態

    <dl>
    <dt></dt>
    <dd></dd>
    </dl>
    <dl>
    <dt></dt>
    <dd></dd>
    </dl>
    <dl>
    <dt></dt>
    <dd></dd>
    </dl>

    このような出力をしたいのですがうまく行きません。

    □発生している問題
    以下のように記述したところ、
    出力された新着情報リストでは

    <dt></dt>
    <dd></dd>

    が複数回出力されてしまい、

    <dl>
    <dt></dt>
    <dd></dd>
    <dt></dt>
    <dd></dd>
    <dt></dt>
    <dd></dd>
    </dl>

    となってしまいました。

    □ソースコード

    function sc_catlist($atts, $content = null) {
    extract(shortcode_atts(array(
    “num” => ‘5’,
    “slg” => ”
    ), $atts));
    global $post;
    $cats = get_category_by_slug($slg);
    $cat = $cats->term_id;
    $myposts = get_posts(‘numberposts=’.$num.’&order=DESC&orderby=post_date&category=’.$cat);
    $retour = ‘<dl>’;
    foreach($myposts as $post) :
    setup_postdata($post);
          $retour.='<dt>’.get_post_time(‘Y/m/d’).'</dt>’;
    $retour.='<dd><a href=”‘.get_permalink().'”>’.the_title(“”,””,false).'</dd>’;
    endforeach;
    $retour.='</dl> ‘;
    wp_reset_query();
    return $retour;
    }
    add_shortcode(“catlist”, “sc_catlist”);

    □備考
    以下のように修正しましたが
    このように書き換えると
    一番古い投稿が1記事出力されるだけでした。

    $retour = ‘<dl>’;
    foreach($myposts as $post) :
    setup_postdata($post);
          $retour.='<dt>’.get_post_time(‘Y/m/d’).'</dt>’;
    $retour.='<dd><a href=”‘.get_permalink().'”>’.the_title(“”,””,false).'</dd>’;
    endforeach;
    $retour.='</dl> ‘;

    を以下のように修正。

    foreach($myposts as $post) :
    setup_postdata($post);
          $retour = ‘<dl>’;
          $retour.='<dt>’.get_post_time(‘Y/m/d’).'</dt>’;
    $retour.='<dd><a href=”‘.get_permalink().'”>’.the_title(“”,””,false).'</dd>’;
          $retour.='</dl> ‘;
    endforeach;

    どなたかご教示いただければ幸いです。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • こんにちは

    foreach 文の前に

    $retour = '';

    を定義して、
    foreach ループ内の

      $retour = '<dl>';

      $retour .= '<dl>';

    コードを記述する時は読みズらいので、codeボタン使ってください。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「ショートコードの記述方法について」には新たに返信することはできません。