投稿のマルチページURLを自動でリスト表示する方法

Cocoonカスタマイズ集
この記事は約4分で読めます。
記事内に広告が含まれています。

はじめに

以下の質問に回答します。

独自のショートコードを使用して、ページ分割された記事の分割ページURLをリスト形式で表示します。

この記事では、この方法について説明します。

完成イメージ

使用方法

以下にショートコードを示します。

[my_post_list]
オプション
オプション説明値初期値
ids表示投稿(必須)投稿IDをカンマ区切りで指定

実装手順

以下のコードをfunctions.phpに追加します。

// ショートコードを追加
add_shortcode('my_post_list', function ($atts) {
  $atts = shortcode_atts([
    'ids' => '',
  ], $atts);

  if (empty($atts['ids'])) {
    return '投稿IDを指定してください。';
  }

  $post_ids = explode(',', $atts['ids']);

  ob_start();
  ?>
  <div class="post-list">
    <?php
    foreach ($post_ids as $post_id):
      $post_data = get_post(trim($post_id));
      if (!$post_data) {
        continue;
      }

      global $post;
      $original_post = $post;
      $post = $post_data;

      setup_postdata($post);
      ?>
      <div class="post-list__row">
        <div class="post-list__title-wrapper">
          <a href="<?= get_permalink(); ?>" class="post-list__title">
            <?= get_the_title(); ?>
          </a>
          <?php
          // 分割ページを出力
          wp_link_pages([
            'before'    => '<span class="post-list__pages">',
            'after'     => '</span>',
            'separator' => ' ',
          ]);
          ?>
        </div>
      </div>
      <?php

      wp_reset_postdata();
      $post = $original_post;
    endforeach;
    ?>
  </div>
  <?php
  return ob_get_clean();
});


// フロント用JS・CSSを追加
add_action('wp_enqueue_scripts', function () {
  ob_start();
  ?>
  .post-list {
    display: flex;
    flex-direction: column;
    gap: 15px;

    .post-list__title-wrapper {
      display: flex;
      flex-direction: column;

      .post-list__pages {
        margin-left: 2em;
      }
    }
  }
  <?php

  $handle = 'post-list';

  wp_register_style($handle, false);
  wp_enqueue_style($handle);
  wp_add_inline_style($handle, ob_get_clean());
});

さいごに

今回紹介した方法を使えば、記事のページ分割数やURLもリンク表示することができます。
手作業によるリンク修正という地味ながらも面倒な作業から解放され、より本質的なコンテンツ執筆に集中できるようになります。

タイトルとURLをコピーしました