【WP】記事本文でショートコードを使ってPHP外部ファイルをインクルードする方法

ショートコード作成して記事本文中にPHPファイルをインクルードする

PHPファイルを作成してそのファイルをインクルードしてPHPを実行すれば本文にショートコードを入れるだけで実行できるようになる。

ショートコードを使えばインクルードでなく直接スクリプトを作っても良いかもしれませんがその分だけショートコードを作らないといけないのでメンドウで・・・PHPファイルをその都度作ってインクルードしたほうが便利なのでやってみました。

get_template_part関数でファイルをインクルードする

get_template_part($slug, $name);

この関数はワードプレス3から使えるようで、

使い方は、{slug}-{name}.phpのようにファイル名を指定する。

ファイル名は「aa-bb.php」とか「aa.php」とかで1番目のパラメータのみで2番目のパラメータは無くてもOK、もし1番目も無い場合はファイルは読み込まれない。

PHPファイルをインクルードするショートコードを追加

インクルードするサンプルPHPファイル作成

test.phpのPHPファイルを使っているテーマ内にアップロードして記事本文中の文の間に読み込ませるようにします。

<?php
global $wpdb;
foreach ($wpdb->tables as $key => $value) {
  echo $key . '-' . $value . '<br />';
}
?>

このあと、独自データベーステーブルを作って使うので、$wpdbを出力するこういう適当なサンプルのPHPファイル「test.php」を入れてみました。

このtest.phpファイルをテーマの中、「public_html/wp-content/themes/テーマ名」の中にアップロードします。

 

使っているテーマのfunctions.phpに以下のショートコードタグを追加します。

echoが記事本文の一番上に表示されてしまう

function include_php_shortcode($atts) {
    extract(shortcode_atts(array(
        "slug" => '',
        "name" => ''
    ), $atts));
    $link = get_template_part($slug, $name);
    return $link;
}
add_shortcode("include_php", "include_php_shortcode");

で、記事本文に以下のようなショートコードを入れれば表示されるのですが・・・

[[include_php slug="test" name=""]]

このショートコードだとインクルードしたPHPファイルの中にecho,printなどがあると記事本文の一番上に表示されてしまいます。

echoなどが記事本文の一番上に表示されない方法

ここで解決策を探したところ、こんな解決法がありました!

function include_php_shortcode( $attr ) {
    extract(shortcode_atts(array(
        "slug" => '',
        "name" => ''
    ), $atts));
    ob_start();
    get_template_part($slug, $name);
    return ob_get_clean();
}
add_shortcode("include_php", "include_php_shortcode");

Using get_template_part within Shortcodes - Konstantin Kovshenin

すごい!ob_start関数は出力のバッファを開始してob_get_cleanでバッファ消去

 実際にtest.phpを出力させてみる

ショートコード[[include_php slug=”test”]]を実際に下に書いてみました。

(test.phpの内容は次回詳しく説明させていただきます。今回は出力されているかだけご確認ください。)

 [include_php slug=”includes/test” name=””]

0-9まで合計10個のデータベースのテーブルが表示されていると思います。

0-8まではワードプレスが使うデータベーステーブルで、9のoriginalが独自に作ったテーブルです。

次回、このテーブルを使って作業していきます。

ショートコードを実行させないようにするには?

こういう説明文を書くときにショートコードを実行させずにコードを表示させたいときがあります。

SyntaxHighlighter Evolved プラグインがあります。が、もっと簡単に出来る方法は

[[[include_php slug=”test” name=””]]]

このように2重カッコでくくってあげます。(上のショートコードは3重にしてあります(汗))

そうするとショートコードが実行されずに説明するときなどに記事本文で使えます。

includesディレクトリを作ってインクルードするPHPファイルを入れる

何個もインクルードするPHPファイルをテーマトップにアップロードするとゴチャゴチャしてしまいますのでincludesディレクトリを作ってその中に独自で作ったPHPファイルを入れることにしました。

public_html/wp-content/themes/テーマ名/includes

この中に入れるようにします。

そうするとショートコードは以下のように指定します。

[[include_php slug=”includes/test”]]

ファイル名の前にディレクトリを指定してあげれば読み込むようになります。

 

PHPのお勉強うまく実行されると気持よく、かなり楽しく夢中になります♪

コメント

タイトルとURLをコピーしました