Help us understand the problem. What is going on with this article?

WordPressにショートコードを使ってPHPを埋め込む方法

  • 環境
    • Windows 10 Pro 64bit バージョン1909
    • Local by Flywheel 5.6.1
      • PHP 7.4.1 / MySQL 8.0.16 / Apach / WordPress 5.4.2
      • テーマ : Lightning

ショートコードをつくる基本の方法

  1. functions.phpを開く
  2. PHPで関数を定義して処理を書く
  3. add_shortcode('{ショートコード用文字}', '{関数名}');を書く
  4. WordPressの記事などに[{ショートコード用文字}]を書く
  5. プレビューなんかで見ると処理の結果が出力される
functions.phpに書く
function short_cord_func() {
    return 'ショートコードをつくる基本の方法';
}
add_shortcode('short_cord_string', 'short_cord_func');
記事ショートコードを書く
[short_cord_string]

image.png

外部ファイルを読み込んでショートコードをつくる方法

  1. 外部ファイルにPHPで処理を書く
  2. functions.phpを開く
  3. PHPで関数を定義して外部ファイルを呼び出す処理を書く
  4. あとは「ショートコードをつくる基本の方法」と同じ
テーマ用ディレクトリ配下にディレクトを作って外部ファイルをおいてみた
テーマのディレクトリ
├ functions.php
└ customphp
 └ short-cord.php << 外部ファイル
short-cord.phpという外部ファイルにPHPで処理を書く
// この外部ファイルからの出力がそのまま埋め込まれるイメージ
<p><?php echo '外部ファイルを読み込んでショートコードをつくる方法'; ?><p>
functions.phpにPHPで関数を定義して外部ファイルを呼び出す処理を書く
function short_cord_func() {
    // 出力バッファリングを有効化する
    ob_start();
    // 外部ファイルを読み込む
    // 「.php(拡張子部分)」は不要
    get_template_part('customphp/short-cord');
    // 出力バッファを削除する
    return ob_get_clean();
}
add_shortcode('short_cord_string', 'short_cord_func');

image.png

外部ファイルを読み込むショートコードを複数作る場合

外部ファイルを読み込む専用の関数を作っておくと便利

こんな風に外部ファイルおいてみた
テーマのディレクトリ
├ functions.php
└ customphp
 ├ hoge.php << 外部ファイル
 └ fuga.php << 外部ファイル
functions.php
/**
 * 外部ファイルを読み込む専用関数.
 * @param array 読み込む外部ファイル名(拡張子なし)を値に持つ連想配列(keyはfile).
 **/
function custom_func($args) {
    // $file変数を配列からインポートする
    extract(shortcode_atts(array('file' => 'default'), $args));
    // 出力バッファリングを有効化する
    ob_start();
    // 外部ファイルを読み込む
    get_template_part("$file");
    // 出力バッファを削除する
    return ob_get_clean();
}

/** hoge.phpを使うショートコード用関数. */
function hoge() {
    return custom_func(['file' => 'customphp/hoge']);
}
add_shortcode('hoge', 'hoge');

/** fuga.phpを使うショートコード用関数. */
function fuga() {
    return custom_func(['file' => 'customphp/fuga']);
}
add_shortcode('fuga', 'fuga');

テーマを選定中でちょいちょい変える場合

外部ファイルを複数作っている場合にはどっかのディレクトリにまとめておくとテーマが変わった時にディレクトリ毎持っていけるから便利
だけど、テーマを選定中で使うテーマのディレクトリ毎にコピーしていくのは面倒くさい
そんな時はシンボリックリンクを使うと便利

外部ファイルを入れるディレクトリを作る
{サイトのディレクトリ}/app/public
├ wp-admin
├ wp-includes
├ wp-content
|└ themes
| ├ lightning         << テーマのディレクトリ
| |├ functions.php
| |└ customphp       << シンボリックリンク
| └ twentynineteen   << テーマのディレクトリ
|  ├ functions.php
|  └ customphp       << シンボリックリンク
└ customphp  << 外部ファイル用ディレクトリ
 ├ hoge.php
 └ fuga.php
Windowsのコマンドプロンプトでシンボリックリンクを作る方法
# 1. 管理者権限でコマンドプロンプトを起動する
# 2. シンボリックリンクを作りたいところに移動する
>cd "c:\Users\{ユーザ}\Local Sites\sample\app\public\wp-content\themes\twentynineteen"
# 3. ディレクトリ(/D)のシンボリックリンクをつくる(mklink)
>mklink /D customphp "c:\Users\{ユーザ}\Local Sites\sample\app\public\customphp"
customphp <<===>> c:\Users\{ユーザ}\Local Sites\sample\app\public\customphp のシンボリック リンクが作成されました

ショートコードを作ってみた

WordPressでPHPを埋め込む方法がなんとなくわかったので早速Google検索した結果を表示するショートコードを作ってみた。
WordPressでGoogleのCustom Search APIを使ってみる - ponsuke_tarou’s blog

ponsuke0531
びっくりするほど物覚えが悪いが、エンジニアを目指しています。
http://ponsuke-tarou.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした