手当たり次第に書くんだ

飽きっぽいのは本能

WordPress のショートコード運用を見直す – 経過日数表示を例に本文と機能を分離する

WordPress で「指定した日付から現在まで何日経過したか」を表示するショートコードを作る、という小さなメモを書いたことがあります。機能としては単純ですが、今あらためて見ると、これは WordPress の本文に機能をどう埋め込むかを考える題材になります。

ショートコードは便利です。しかし、記事本文に独自機能の呼び出しを増やしすぎると、将来のテーマ変更、ブロック化、プラグイン整理、記事移行のときに扱いづらくなります。この記事では、経過日数表示を例に、本文と機能の責務を分けて考えます。

経過日数表示は何に使えるか

経過日数表示は、たとえば「この記事を書いてから何日経過したか」「サービスを開始してから何日か」「検証環境を作ってから何日か」を表示したい場合に使えます。

ただし、技術ブログでは日数そのものよりも、初出日、更新日、再編日、現在の推奨状況を明示する方が重要な場合もあります。単に日数を自動表示するだけでは、読者に必要な文脈が伝わらないことがあります。

ショートコードは便利だが本文に残る

ショートコードの利点は、本文の中から機能を簡単に呼び出せることです。たとえば次のように書けば、指定日からの経過日数を表示する仕組みにできます。

[elapsed_days date="2023-07-01"]

一方で、この記述は記事本文の中に残ります。ショートコードを提供しているテーマやプラグインを削除すると、本文にショートコード文字列がそのまま表示されることがあります。

方式利点注意点
ショートコード本文から簡単に機能を呼べる提供元を消すと本文に残る
ブロックGutenberg の構造として扱いやすい独自ブロックは実装と移行を考える必要がある
テーマ関数表示ロジックをテーマ側に集約できるテーマ変更時に消える可能性がある
プラグイン機能をテーマから分離できる保守対象が増える
本文に固定文で書く移行に強い自動更新はできない

実装例

どうしてもショートコードとして実装するなら、日付の扱い、タイムゾーン、エスケープを意識します。次は簡単な例です。実際に使う場合は、テーマの functions.php に直接増やし続けるより、小さな自作プラグインに分ける方が管理しやすいです。

<?php
function si_elapsed_days_shortcode($atts) {
    $atts = shortcode_atts(
        array(
            'date' => '',
        ),
        $atts,
        'elapsed_days'
    );

    if (empty($atts['date'])) {
        return '';
    }

    $start = new DateTimeImmutable($atts['date'], wp_timezone());
    $today = new DateTimeImmutable('today', wp_timezone());
    $days = $start->diff($today)->days;

    return esc_html(number_format_i18n($days));
}
add_shortcode('elapsed_days', 'si_elapsed_days_shortcode');

functions.php に増やし続けない

WordPress では、ちょっとした機能を functions.php に書きたくなります。しかし、テーマを変更するとその機能も消えます。また、記事本文がそのショートコードに依存している場合、テーマ変更が本文表示の破損につながります。

サイト固有の機能として長く使うなら、テーマではなく自作プラグインとして分ける方が自然です。テーマは見た目、プラグインは機能、記事本文は内容、という責務分離にできます。

古い記事の表示には注意が必要

経過日数のような動的表示は、古い記事で使うと面白い一方で、読者に誤解を与えることもあります。たとえば「この記事は公開から 3000 日経過しています」と表示しても、その内容が現在も有効なのか、当時の記録なのかは別問題です。

古い技術記事では、日数よりも次の情報を明示した方が実用的です。

  • 初出日
  • 再編日
  • 対象バージョン
  • 現在も推奨するか
  • 現在は非推奨なら代替手段
  • 後続記事や関連する現在の記事へのリンク

現在ならどう考えるか

現在のブログ運用では、ショートコードを増やすより、Gutenberg のブロック構造、共通 CSS、広告カード、関連記事、記事更新日表記を整理する方が長期的に扱いやすいです。

経過日数のような動的表示は、必要な場所に限定して使います。記事本文全体の意味を補強するために使うならよいですが、単なる飾りとして増やすと、後から移行や再編の負債になります。

まとめ

現在からの経過日数を出力するショートコードは、WordPress の小さなカスタマイズとしては分かりやすい題材です。ただし、本質的には「本文に機能をどこまで埋め込むか」という設計問題です。

ショートコードは便利ですが、本文に依存が残ります。長く使う機能は自作プラグインへ分け、テーマは見た目、本文は内容、機能はプラグインという責務分離を意識した方が、後から記事を再編しやすくなります。

参考
書籍
参考書籍

WordPress 仕事の現場でサッと使える!デザイン教科書 [WordPress 6.x対応版] 改訂第3版

WordPress のサイト構築、テーマ、カスタマイズ、運用項目を確認したい場合の参考書籍です。価格や在庫、WordPress の最新仕様との差分はリンク先や公式ドキュメントで確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

関連記事

WordPress のショートコード運用を見直す – 経過日数表示を例に本文と機能を分離する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る