よくサービスなどを運営しているとURLのパラメーターにつけた会員のIDを取得して、ページ内のリンクに挿入するということをやると思います。飛び先のページで会員を識別するためです。WordPressでも同様のことを行うために、今回はJavaScriptを使わずに、WordPressの「ショートコード」という機能を使ってパラメーターの値を取得するようにしました。実装方法を紹介します。
一般的なGET値の取得方法(JS & PHP)
URLのパラメーター(GET)の値を取得するには一般的に以下のような方法を使います。例えば以下のようなURLがあったとして、ぞれぞれid、nameの値を取得したい場合、
http://example.com/?id=001&name=hoge
JavaScriptで書くと以下のようになります。
PHPで書くと以下のようになります。
上記のようにJavaScriptで書けばWordPressの記事内でURLのパラメーターの値を取得して表示させることができます。では、PHPで書く場合はどうなるでしょうか?そうです、WordPressでは記事の中にはPHPのコードを書くことができません。どうしてもPHPで書きたいという人は困ってしまいますね。
WordPressの記事内にPHPのコードを書くためのプラグイン
WordPressの記事内でPHPのコードを書きたいという需要は多少あるみたいで、記事内にPHPのコードを書くためのプラグインも作られています。検索するとよく出てくるのは、「exec-php」というプラグインです。
このプラグインをインストールすると、以下のように記事内にPHPのコードを書いて実行させることができます。
ただこのプラグインには問題があり、以下のブログでも言われていますが、数年前から更新が止まっていたり、eval関数が使われていたりして、「セキュリティ的に危険」です。できることなら使わない方がよいでしょう。
では、どうするのか?[ショートコード]でしょ!
そもそもWordPressでは、自分でPHPのコードを書きたいなら「function.phpを使ってください」ということになっていて、記事内にPHPのコードを書くことを前提に作られていません。
ただWordPressもそこまで酷ではなく、function.php内に書かれた関数を呼び出し、戻り値を取得することを可能とする[ショートコード]という機能を設けてくれています。つまり、Smartyのようなテンプレートエンジンのように使うことができるようになっています。これは大変便利です。
ショートコードの作り方
ショートコードは、「[]」を使ってfunction.phpで設定した関数のショートコード名を囲って記事内に置きます。
「関数」と「ショートコード」を結びつけるには、Wordpressの「add_shortcode()関数」を使ってfunction.php内に以下のように書きます。
以上のように、ショートコードは簡単につくれます。例として、「よく使う素敵な10個のショートコード」と題した以下のブログ記事を紹介します。参考にしてください。
パラメーター「id」の値を取得する
では、さっそくショートコードを作って、URLのパラメーターの値を取得して表示させてみましょう。WordPressの記事URLに以下のようなパラメーターをつけた場合を例にショートコードを作ります。
http://example.com/?id=001
function.phpには以下のように記述します。「get_id_val」という関数を作り、add_shortcode()関数を使って、「id」というショートコード名と紐付けています。get_id_val()関数は実行するとURLのパラメーターのidの値を取得します。
記事内で以下のようにショートコードを任意の場所に挿入すると、ショートコードがget_id_val()関数を実行させ、パラーメータのidの値「001」を取得し表示します。
引数も使える!ショートコードの汎用化
ショートコードは引数にも対応しています。上記のショートコードでは、idというパラメーターにしか対応していません。他のパラメーターの値を取得するために、その都度そのパラメーターに対応した関数とショートコードを作るのは面倒です。そこで、任意のパラメーターのキーを引数として渡し、そのキーに対応した値を取得できる汎用的なショートコードを作ることにします。
ショートコードに引数を渡す
引数を渡す場合のショートコードの書き方は以下のようになります。
引数を複数渡すことも可能です。(スペース区切りで追加していきます。)
ショートコードと関数の結び付け方は、上でも紹介した通りです。
引数を取得するために、ショートコードと結びつける関数の中に以下のような記述を入れます。(これはお約束みたいなものです。)
shortcode_atts()関数はWordPressの関数で、2つの連想配列「配列1(デフォルト)」と「配列2」を引数に取り、配列2の値を配列1にマージしてくれます。配列1と配列2のKey名は同じものにしておく必要があります。配列2にあっても、配列1に存在しないKeyは無視されます。
extract()関数はPHPの関数で、連想配列のkeyと同じ名称をもつ「変数」として連想配列の値を格納して(、シンボルテーブルに変数をインポートして)くれます。
URLのパラメーターの値を取得するショートコード
上記を踏まえ、URLのパラメーターの値を取得するget_param_val()関数を作り、add_shortcode()関数でショートコードの設定を行います。以下のようにfunction.phpに記述します。
例えば、記事のURLが以下だった場合
http://example.com/?id=001
以下のようにショートコードに引数を設定してパラメーターの「id」の値を取得します。
パラメーターが複数の場合でも対応可能です。
http://example.com/?id=001&name=hoge
ショートコードに別々の引数を設定し、それぞれのパラメーター(「id」と「name」)の値を取得します。
以上のように汎用的に使えるようにショートコードを作っておくと使いたいときにすぐ使えるので便利ですね。WordPress内でちょっとした演出などをしたい場合はショートコードの使用をぜひおすすめします。
コメント