PHP

【WordPress】ショートコードの登録とプログラムコード(テンプレート)からの実行方法

更新日:2024/02/25

WordPressには記事内から関数を呼び出すショートコードという機能があります。
今回はショートコードの登録方法と、記事以外からショートコードを呼び出す方法をお伝えします。

 

ショートコードの登録方法

ショートコードの登録は、add_shortcode()関数を使用します。
この関数は、ショートコードに閉じタグがあるかどうかで記述方法が変わります。

閉じタグが無い場合

次のような閉じタグが無いショートコードを登録するケースを考えてみます。

[my_shortcode text="Hello" type="upper"]

この場合は、add_shortcode()関数を使って、次のようにショートコードを登録します。

// 文字列を大文字または小文字に変換するショートコード
add_shortcode( 'my_code' , function($atts){
        // デフォルト値のセット
    $atts = shortcode_atts(
        array(
            'text' => '',
            'type' => 'upper',
        ), $atts, 'my_code' );
	
    switch( $atts['type'] ){
            // 大文字に変換
        case 'upper': return strtoupper($atts['text']);
            // 小文字に変換
        case 'lower': return strtolower($atts['text']);
            // そのまま返す
        default: return $atts['text'];
    }
});

add_shortcode()関数の第一引数はショートコード名で、第二引数は呼び出されるコールバック関数です。

閉じタグが無いショートコードは、コールバック関数に一つだけ引数が渡されます。
この引数は、ショートコード内から抽出された属性をキーとする連想配列です。

[my_shortcode text="Hello" type="upper"]

なら、次のような値を受け取ります。

$atts:array(
    'text' => 'Hello',
    'type' => 'upper',
)

コールバック関数内のshortcode_atts()は、第一引数の連想配列のキーが第二引数の連想配列に無いとき、第二引数にセットされるWordPressの関数です。
つまり、これにより規定値を定義していることになります。

例えば

[my_shortcode text="Hello"]

のようにtype属性が指定されなかったとき、規定値として 'upper' がセットされます。

shortcode_atts()の第三引数に文字列を指定すると、shortcode_atts_{第三引数}フィルターがshortcode_atts()内で呼び出されます。
このフィルターを使用することで、shortcode_atts()の結果を変更できます。

閉じタグがある場合

今度は、次のような閉じタグがあるショートコードを登録するケースを考えてみます。

[my_shortcode text="Hello" type="upper"]Hello[/my_shortcode]

この場合は、add_shortcode()関数を使って、次のようにショートコードを登録します。

// 文字列を大文字または小文字に変換するショートコード
add_shortcode( 'my_code' , function( $atts , $content='' ){
    $atts = shortcode_atts(
		array(
			'type' => 'upper',
		), $atts, 'my_code' );
	
	switch( $atts['type'] ){
		case 'upper': return strtoupper($content);
		case 'lower': return strtolower($content);
		default: return $content;
	}
});

コールバック関数に第二引数が追加されています。
この引数には、ショートコードのタグで挟まれた文字列がセットされます。

この他は、閉じタグが無い場合と同じです。

shortcode_atts_{$shortcode}フィルター

shortcode_atts_{$shortcode}フィルターは、shortcode_atts()関数内から呼び出されるフィルターです。

フィルター名の$shortcodeshortcode_atts()関数の第三引数で、空文字以外のときに有効となります。

例えば次のようにshortcode_atts()関数を呼び出したとします。

$atts = shortcode_atts(
        array(
            'text' => '',
            'type' => 'upper',
        ), $atts, 'my_code' );

shortcode_atts_{$shortcode}フィルターのフックは次のように定義します。

add_filter( 'shortcode_atts_my_code', function( $out, $pairs, $atts, $shortcode ){
    $out['type'] = 'lower';
	return $out;
},10,4);

コールバック関数の引数は4つです。

  • $out:
    shortcode_atts()の引数から生成された連想配列
  • $pairs:
    shortcode_atts()の第一引数
  • $atts:
    shortcode_atts()の第二引数
  • $shortcode:
    ショートコード名

 

記事内以外からのショートコード実行方法

WordPressのテンプレートやプラグインコードからショートコードを呼び出すときは、do_shortcode()関数を使用します。

do_shortcode()関数の定義

do_shortcode( $content, $ignore_html = false )
  • $content:

    ショートコードを含んだ文字列です。
    do_shortcode()関数はこの文字列からショートコードを検索して実行して、その結果で$contentを置換します。

  • $ignore_html:

    html要素内のショートコードを無視するかどうかを指定します。
    無視する場合、[は[に、]は]に置換されます。

実行例:

do_shortcode( '今日僕は彼女に「[my_shortcode text="Hello" type="upper"]」と言った' );

WordPressはHTMやCSSの知識も必要。総合的な知識を身につけよう。

更新日:2024/02/25

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。