• 解決済 no23h

    (@no23h)


    functions.phpにカスタム投稿のリストを出力させるショートコードを作成しました。

    function shortcode_post_list($atts) {
      extract(shortcode_atts(array(
        // パラメータ (引数の指定がなければ指定の値が格納される)
        'num' => '-1',
        'post_type' => 'post',
    
      ), $atts));
      global $post;
      $args = array(
        'posts_per_page' => $num,
        'post_type'      => $post_type,
        'order'          => 'DESC',
        'post_status'    => 'publish'
      );
      $posts_array = get_posts($args);
      $html = '<ul class="news_list_box flex_container">';
      foreach($posts_array as $post):
        setup_postdata($post);
        $html .= '<li class="box">';
        $html .= '<a href="'.get_permalink().'">';
    
        if (has_post_thumbnail()) :
          $html .= '<div class="back_img  box_5x3" style="background-image: url('.wp_get_attachment_url( get_post_thumbnail_id() ).')"></div>';
        else :
          $html .= '<div class="back_img  box_5x3" style="background-image: url('.get_theme_file_uri().'/img/eyecatch_default.jpg)"></div>';
        endif;
        $html .= '</a>';
        $html .= '<p>';
        $html .= '<span class="date">'.get_the_date().'</span>';
        $html .= '<span class="category">'.the_terms(get_the_ID(),'news_cat').'</span>';
        $html .= '</p>';
        $html .= '<h3><a href="'.get_permalink().'">'.get_the_title().'</a></h3>';
        $html .= '</li>';
    
      endforeach;
      $html.='</ul>';
      wp_reset_postdata();
      return $html;
    }
    add_shortcode('post_list', 'shortcode_post_list');

    これを、プラグイン「Elementor」のショートコードウィジェットで出力したところ、
    以下のように、the_terms()の出力位置が

      タグ外になってしまいます。

      [出力結果]

      <div class="elementor-widget-container">
      
       ※タームがこの位置に出力されてしまう
        <a href="https://www.research.oit.ac.jp/crssc/news_cat/news-cat-1/" rel="tag">ニュースカテゴリ1</a><a href="https://www.research.oit.ac.jp/crssc/news_cat/news-cat-2/" rel="tag">ニュースカテゴリ2</a>
      
        <div class="elementor-shortcode">
            <ul class="news_list_box flex_container">
                <li class="box"><a href="https://www.research.oit.ac.jp/crssc/news/news-5465/">
                        <div class="back_img  box_5x3" style="background-image: url(https://www.research.oit.ac.jp/crssc/wp-content/uploads/2020/12/news_dammy_06.jpg)"></div>
                    </a>
                    <p><span class="date">2021年1月8日</span><span class="category"></span></p>
                    <h3><a href="https://www.research.oit.ac.jp/crssc/news/news-5465/">ニュースサンプル14</a></h3>
                </li>
                <li class="box"><a href="https://www.research.oit.ac.jp/crssc/news/news-5464/">
                        <div class="back_img  box_5x3" style="background-image: url(https://www.research.oit.ac.jp/crssc/wp-content/uploads/2020/12/news_dammy_05.jpg)"></div>
                    </a>
                    <p><span class="date">2021年1月8日</span><span class="category"></span></p>
                    <h3><a href="https://www.research.oit.ac.jp/crssc/news/news-5464/">ニュースサンプル13</a></h3>
                </li>
            </ul>
        </div>
      </div>

      テンプレートタグに直接ショートコードを書き込んでも同様の出力結果になります。
      <?php echo do_shortcode('[post_list post_type = "news" num = "2" ]'); ?>

      [出力結果]

      
      <a href="https://www.research.oit.ac.jp/crssc/news_cat/news-cat-1/" rel="tag">ニュースカテゴリ1</a>><a href="https://www.research.oit.ac.jp/crssc/news_cat/news-cat-2/" rel="tag">ニュースカテゴリ2</a>
      <ul class="news_list_box flex_container">
          <li class="box"><a href="https://www.research.oit.ac.jp/crssc/news/news-5465/">
                  <div class="back_img  box_5x3" style="background-image: url(https://www.research.oit.ac.jp/crssc/wp-content/uploads/2020/12/news_dammy_06.jpg)"></div>
              </a>
              <p><span class="date">2021年1月8日</span><span class="category"></span></p>
              <h3><a href="https://www.research.oit.ac.jp/crssc/news/news-5465/">ニュースサンプル14</a></h3>
          </li>
          <li class="box"><a href="https://www.research.oit.ac.jp/crssc/news/news-5464/">
                  <div class="back_img  box_5x3" style="background-image: url(https://www.research.oit.ac.jp/crssc/wp-content/uploads/2020/12/news_dammy_05.jpg)"></div>
              </a>
              <p><span class="date">2021年1月8日</span><span class="category"></span></p>
              <h3><a href="https://www.research.oit.ac.jp/crssc/news/news-5464/">ニュースサンプル13</a></h3>
          </li>
      </ul>

      原因は何でしょうか?
      お詳しい方、ご教授いただけますと幸いです。
      宜しくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • the_terms()の中を確認しますと、

    echo apply_filters( 'the_terms', $term_list, $taxonomy, $before, $sep, $after );

    となっていますので、ここで文字列が出力されていると思われます。

    代わりにget_the_terms()あたりをうまく使ってみてはどうでしょうか。

    トピック投稿者 no23h

    (@no23h)

    @aoixtreme

    get_the_terms()で希望通りに出力できました。
    有難うございます!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「関数the_terms()の出力位置が希望通りにならない」には新たに返信することはできません。