【WordPress】ショートコードAPIを使った管理画面からの関数実行
short codeを使った管理画面からの関数実行
WordPressを使ったサイトで、「お問い合わせ」をメールフォームを使わないで、リンクからメーラーを立ち上げる方法で対応した際に、IEの8以下だと文字化けてしまった為、ブラウザを判定して文字コードを変更する関数を作成しました。
ところが、the_contents()関数で表示されるHTMLにお問い合わせリンクが含まれている場合、その関数が使えない。プラグインを入れて、the_contents()にPHPやJavaScriptのコードを書いて文字コードを変更する処理を書くことは可能だが、セキュリティー上の問題が発生しやすくなる為止めた方がいい。
そこで、メディアを管理しているギャラリー機能で使われているショートコードAPIを使えば、解決できることがわかったので、その方法を書いてみようと思います。
お問い合わせのリンクでメーラを起動する関数
関数の処理概要
ブラウザによって文字コードを変換する
メール本文に改行を含めることが可能
以下、作成したメール送信のaタグの部分を作成する関数。
<?php function createMailLink($to_address, $subject = null, $body = null) { $mail_html = ""; $str_encode = 'UTF-8'; // ブラウザ判定 if (stristr($_SERVER['HTTP_USER_AGENT'], "msie")) { // IE $str_encode = 'SJIS'; $subject = mb_convert_encoding($subject, $str_encode); $body = mb_convert_encoding($body, $str_encode); } if (empty($to_address)) { return null; } else { $to_address = htmlentities($to_address, ENT_HTML5, $str_encode); } if (!empty($subject)) { $mail_html .= 'subject=' . urlencode($subject) . "&"; } if (!empty($body)) { $body = urlencode($body); $mail_html .= 'body=' . $body; } $mail_html = "mailto:" . $to_address. '?' . $mail_html; return $mail_html; } ?>
今作った関数をそれぞれのページの.phpで使用する場合は、
<?php // 改行を含めたメール本文を作成 $body = "下記の内容をご記入の上、お問い合わせください ■ご連絡先 ■お問い合わせ内容 "; ?> <a href="<?php createMailLink("info@test.com", "お問い合わせ", $body); ?>">お問い合わせ</a>
メールが立ち上がった時の画面
ショートコードAPIの設定
ショートコード用の関数登録処理の書き方、第1引数のcreate_mailtoがショートコード名、第2引数がショートコードを実行する時の関数名(create_mailto_handler)となる。
<?php // ショートコード対応 add_shortcode('create_mailto', 'create_mailto_handler'); ?>
ショートコード用関数(create_mailto_handler)では、管理画面で使えるパラメータを受け渡す処理書きます。
shortcode_atts の第1引数に設定する配列は、設定できるパラメータ名と初期値を設定します。
そして、createMailLink関数に受け取った内容をそのまま設定して実行しています。
<?php function create_mailto_handler($atts, $content=null) { extract( shortcode_atts( array( 'to_address' => 'info@test.com', 'subject' => '', 'body' => '', ), $atts ) ); return createMailLink($to_address, $subject, $body); } ?>
管理画面のコンテンツ入力画面では、どういった記述をすることになるかというと、
お問い合わせは、<a href="[create_mailto to_address="info@test.com" subject="問い合わせ" body=""]">こちら</a>から
と書くことで、PHPの処理を実行するが可能です。プラグインを入れるよりも、shortcodeを使うことで、共通の関数が使えるので利便性が向上しました。
ショートコードAPIを使った場合のソース全体
WordPress でHTMLのa mailto:を使った文字列を生成する関数と、管理画面の入力から ...
初めて、gistからソースコードを公開してみました。使ったばかりなので、WEBからだとインデントが崩れたりしてうまくいきませんでした。慣れるには、もう少し時間がかかりそうです。
まだブログを書くのに時間がかかってしまっているので、書く頻度をもう少し増やそうと思うのですが、週に1つくらいになってしまってます。これ以上減らさないようにしながら、マイペースで書いていこうと思います。