はじめに
以下の質問に回答します。
独自のショートコードを使用して、ページ分割された記事の分割ページ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もリンク表示することができます。
手作業によるリンク修正という地味ながらも面倒な作業から解放され、より本質的なコンテンツ執筆に集中できるようになります。
