雑多なブログ

音楽や語学、プログラム関連の話題について書いています

wordpressでshortcodeを作る

仕事でwordpressにて、カスタムショートコードを使って記事の内容を出し分ける処理を実装したので、その覚え書き。

ショートコードは次の方法でwordpressに組み込む事ができる。

functions.phpに組み込む方法は検証用途では手軽ではあるものの、本番の環境に適用するにはリスクのある方法と言える。なにしろ、functions.phpwordpressのシステム全体に影響を及ぼすファイルであるため、そこに問題が生じるとサイト全体に問題が波及する。
一方で、プラグインとして登録するのは、若干手間は増えるが比較的に安全に組み込む事ができる方法と言える。

プラグインの作り方自体はこの記事にも書いたが、それほど複雑ではない。

cufl.hateblo.jp

さておき、ショートコードの実装をしてみる。

ショートコードの実装例

サンプルのショードでは、ショートコードで囲んだテキストを期間指定で表示するという事をやってみた。期間外には何も表示されなくなるので、一定期間だけ表示したい文言を自動で切り替えたい場合に使用できると思う。

パラメーターのバリデーションは行っていないので実際に利用する場合はそのあたりチェックするよう改善したいと思う。ひとまず実装のアイディアとして残しておくよ。

<?php
/*
Plugin Name: MySample
Plugin URI:
Description: Sample plugin for WordPress.
Version: 1.0.0
Author: 
Author URI: 
License: GPLv2 or later
*/

$sample_shortcode = new SampleShortcode();

class SampleShortcode {
    public function __construct() {
        add_shortcode('mysample', array($this, 'sampleShortcode')); 
    }

    public function sampleShortcode($atts, $content = null) {
        date_default_timezone_set('Asia/Tokyo');
        
        if (!isset($atts['from'])) return '';

        if (time() < strtotime($atts['from']))  {
            return '';
        }

        if (isset($atts['to']) && strtotime($atts['to']) < time()) {
            return '';
        } 

        return $content;
    }
}

記事にショートコードを使用する例

[mysample from="2020-11-22 11:20:00" to="2020-11-23 05:11:11"]
期間限定表示するテキスト
[/mysample]

記事以外の場所でショートコードを使用する例

echo do_shortcode('
[mysample from="2020-11-22 11:20:00" to="2020-11-23 05:11:11"]
期間限定表示するテキスト
[/mysample]
');

注意点

wordpressをインストールしている環境のPHPタイムゾーンの設定を確認する事。JST(Asia/Tokyo)じゃないのに、日本時間で期間指定(from,to)を指定すると、期待した期間で表示されないので注意。