2022.09.16WEB - WordPress

WPの記事内で自サイトのリンクをショートコードで呼び出す

functions.phpへ

// 内部リンクをショートコードで指定する
function shortcodeFunc ($arg) {
  extract ( shortcode_atts ( array (
    'id'         => 0,
    'slug'       => '',
    'postpage'   => 'post',
    'anchorlink' => '',
    'anchortext' => '',
  ), $arg ) ); 
 
  $html = "";
  $post_object = "";
 
  if ($slug) {
    $post_object = get_page_by_path ( $slug, OBJECT, $postpage );
  } elseif ($id != 0) {
    $post_object = get_post ( $id );
  }
 
  if ($post_object) {
    if ($anchorlink) {
      $anchorlink = "#" . $anchorlink;
    }
    if ($anchortext) {
      $anchortext = "/" . $anchortext;
    }

    $link = get_permalink ($post_object -> ID) .$anchorlink;
    $linktxt = $post_object -> post_title .$anchortext;

    $thumb   = wp_get_attachment_url( get_post_thumbnail_id($id)); // サムネイルの設定をする場合
    $nothumb = "noimg.jpg"; // サムネイルがない場合の画像を設定する場合
    if($thumb) {
      $thumb_url = $thumb;
    } else {
      $thumb_url = $nothumb;
    }

    // カスタム投稿のタクソノミーを取得する場合 news_cat など
    if ($terms = get_the_terms($id, 'タクソノミー1')) {
      foreach ( $terms as $term ) {
        $term_tag = esc_html($term->name);
      }
    }
    if ($terms = get_the_terms($id, 'タクソノミー2')) {
      foreach ( $terms as $term ) {
        $term_tag = esc_html($term->name);
      }
    }
  
    // 日付の取得をする場合
    $Y = get_the_date('Y');
    $m = get_the_date('m');
    $d = get_the_date('d');
    $week = get_the_date('D');

  $html = "<a href=\"{$link}\">";
  $html .= "<img class=\"img\" src=\"{$thumb_url}\" alt=\"{$linktxt}\">";
  $html .= "{$linktxt}";
  $html .= "<span class=\"category\">{$term_tag}</span><time datetime=\"{$Y}-{$m}-{$d}\" class=\"date\">{$Y}.{$m}.{$d}</time>";
  $html .= "</a>";

  }
 
  return $html;
}
add_shortcode('get_postlink', 'shortcodeFunc');

記事へ

[get_postlink id=記事ID postpage=postやpage、カスタム投稿のスラッグ]
[get_postlink id=postid slug=slug postpage=post anchorlink=aaa anchortext=あああ]

参考:自サイト内のリンクをショートコードで指定する・アンカーリンク対応版