WordPress内でAjaxで非同期にサーバとの間の通信を行ってみました。
例として任意のテキスト内の特殊文字を特殊文字を HTML エンティティに変換してみます。
- 呼び出すファンクション名を 「functions.php」に記述する。
- 呼び出されるphp関数を作成する。今回のサンプルでは特殊文字を変換するphp関数利用する
- javascript(今回はjQeury)でAjaxの呼び出し関数を作成する。
jQuery 及び CSS等々は別途プラグインの利用や functions.phpでインクルードする必要があります。ここでは WordPressからAjaxの利用に関するテストのみとします。
また、実際の運用では入力文字のチェック、入力制限、文字コードの判別等々のチェックが必要となります。ここではあくまでAjaxのテスト、サンプルですのでご了承ください。
  
functions.phpの修正
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | //--------------------------------------------- //Ajaxのリクエスト送信先 admin-ajax.php の情報を //javascriptのグローバル変数として出力する。 //--------------------------------------------- function add_my_ajax() { ?>     <script>         var ajaxurl = '<?php echo admin_url( 'admin-ajax.php'); ?>';     </script> <?php } //--------------------------------------------- //Ajaxから呼び出される関数の作成。 //ここでは単純な htmlspecialchars()関数を使用し特殊文字を HTML エンティティに変換する //--------------------------------------------- function view_sitename(){ $tmp = htmlspecialchars($_POST["message"], ENT_QUOTES); echo stripslashes(htmlspecialchars($tmp, ENT_QUOTES));     die(); } //--------------------------------------------- wp_ajax_{action名} … ログインユーザーの時、呼び出される<br> wp_ajax_nopriv_{action名} … 非ログインユーザーの時、呼び出される //--------------------------------------------- add_action( 'wp_ajax_view_sitename', 'view_sitename' ); add_action( 'wp_ajax_nopriv_view_sitename', 'view_sitename' ); //--------------------------------------------- | 
呼び出し、結果表示の一連のHTML
レイアウト、デザイン関係のCSSは省略
| 1 2 3 4 5 6 | <textarea id="cource"></textarea>   // テキストエリアで入力した内容をAjax経由のphpで変換し他結果を  // 以下の #dist要素に表示させる <div id="dist"></div> <a href="#" id="submit">変換</a> </div> | 
呼び出し、結果表示の一連のjQuery
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | jQuery(function($) { $( '#submit' ).on( 'click', function(){     var source=$("#source").val();     $.ajax({         type: 'POST',         url: ajaxurl,         data: {             'action' : 'view_sitename',               // functions.php で定義したアクション名             'message' : source,             // 入力したテキスト内容         },         success: function( response ){             $("#dist").html( response  );             // Ajaxから帰ってきた内容         }     });     return false; }); | 

