WordPressテーマSANGOの質問

記事一覧の出力内容をカスタマイズする

アバター
Y

サルワカさん、こんにちは。

18. 指定したカテゴリーIDの記事を好きな数だけ出力
についてお伺いしたいことがあります。

[catpost catid="xxx" num="20" type="card2"]
で出力し、表示自体はとてもうまくいったのですが、
このカードタイプのタイトル下に抜粋文を表示したいという要望が出てきました。

functions.phpでのオーバーライドが必要だと思うのですが、思うように行きません。
何か良い方法はないでしょうか?

SANGOのショートコード一覧
SANGOのショートコード一覧
コメントへの回答
サルワカくん
サルワカくん
2019/03/23

ショートコードの場合は、オーバーライドではなく別のショートコードを作るのが良いかと思います。
以下はfunctions.phpに貼り付けるサンプルです。
[mycatpost ...]で呼び出せるオリジナル用のショートコードを作っています。
その中で呼び出すカードは2つめの関数で定義しています。
「このあたりに抜粋文を入れる」というテキストを書いておいたので、そちらに抜粋文が入るようにカスタマイズしてくださいませ。

/*********************
オリジナルのカードリンクを好きな数だけ出力するショートコードを作成
*********************/
add_shortcode('mycatpost', 'sng_my_output_cards_by');
function sng_my_output_cards_by($atts)
{
  $num = isset($atts['num']) ? esc_attr($atts['num']) : '4';
  $catid = isset($atts['catid']) ? explode(',', $atts['catid']) : null;
  $notin = isset($atts['notin']) ? explode(',', $atts['notin']) : null;
  $orderby = isset($atts['orderby']) ? $atts['orderby'] : 'date';
  $order = isset($atts['order']) ? ($atts['order']) : "DESC";

  if ($catid) {
    $output_posts = get_posts(array(
      'category__in' => $catid,
      'numberposts' => $num,
      'orderby' => $orderby,
      'order' => $order
    ));
  } else {
    $output_posts = get_posts(array(
      'category__not_in' => $notin,
      'numberposts' => $num,
      'orderby' => $orderby,
      'order' => $order
    ));
  }
  $output = "";
  foreach ($output_posts as $post) {
    $output .= sng_my_card_link(array('id' => $post->ID));
  }
  return $output;
}

/*********************
1つのオリジナルカードを出力する関数を作成(上の関数から呼び出す)
 *********************/
add_shortcode('mycardlink', 'sng_my_card_link');
function sng_my_card_link($atts)
{
  $id = isset($atts['id']) ? esc_attr($atts['id']) : null;
  $output = '';
  if ($id) {
    $ids = (explode(',', $id));
  }
  $target = isset($atts['target']) ? ' target="_blank"' : "";
  foreach ($ids as $eachid) {
    $img = (get_the_post_thumbnail($eachid)) ? get_the_post_thumbnail($eachid, 'thumb-520') : '<img src="' . featured_image_src('thumb-520', $eachid) . '">';
    $url = esc_url(get_permalink($eachid));
    $title = esc_attr(get_the_title($eachid));
    $time = get_the_time('Y.m.d', $eachid);
    $icon_name = get_option('use_fontawesome4') ? '<i class="fa fa-clock-o"></i>' : '<i class="fas fa-clock"></i>';
    if ($url && $title) {
      $output .= <<<EOF
    <a class="c_linkto longc_linkto" href="{$url}"{$target}>
      <span class="longc_img">{$img}</span>
      <span class="longc_content c_linkto_text">
        <time class="longc_time dfont">{$icon_name} {$time}</time>
        <span class="longc_title">{$title}</span>
        このあたりに抜粋文を入れる
      </span>
    </a>
EOF;
    }
  }
  return $output;
}
//END 1つのカードを出力する関数