WordPressとブラウザとの間でAjax通信する

WordPressとブラウザとの間でAjax通信するために、ブラウザ側の処理とサーバー側の処理を、WordPressのソースコードに追記します。

このサンプルコードでは、WordPressのサイトにアクセスした時に、Ajax通信でサーバーから受け取った「answer」という文字列を、コンソールログに表示するようにしています。

ブラウザ側の処理

WordPressにAjax通信のリクエストを投げるために、たとえば、index.phpなどに以下のコードを記述します。

<script> var wp_url_admin_ajax = '<?php echo admin_url('admin-ajax.php'); ?>'; </script>
<script>
  jQuery(function ($) {
    $.ajax({
      type: 'POST',
      url: wp_url_admin_ajax,
      data: {
        'action': 'tell_me'
      },
      success: function (response) {
        json = eval("(" + response + ")");
        if (json.err) {
          result = "error:404";
        } else {
          console.log(json);
        }
      }
    });
  });
</script>

サーバー側の処理

ブラウザからのAjax通信に応答するために、function.phpに以下のコードを記述します。

add_action('wp_ajax_tell_me', 'tell_me');  // ログイン状態のユーザーからのアクセスで動作する
add_action('wp_ajax_nopriv_tell_me', 'tell_me'); // 非ログインのユーザーからのアクセスで動作する
function tell_me() {
  $res = "answer";

  echo json_encode($res, JSON_UNESCAPED_UNICODE);

  die();
}