web関連

【wordpress】wordpressのAjaxを使う方法

wordpressの関数をAjaxで読み込みたかった時に、wordpressのAjaxを使えばできそうだったのでやってみた時の備忘録

wordpressのAjaxを使う方法

やることとしては、カスタムデータ属性で投稿IDの入ったボタンをクリックしたらそのIDに紐づいた投稿記事の本文を取得して表示
別のボタンを押すと別の投稿記事の本文を取得

functions.php

<?php
// headタグ内にadmin-ajax.phpへのパスが入った変数設置
function add_my_ajaxurl() {
?>
  <script>
    var ajaxurl = <?php echo admin_url( 'admin-ajax.php'); ?>;
  </script>
<?php
}
add_action( 'wp_head', 'add_my_ajaxurl', 1 );

// ajaxで渡ってくるID情報を取得して投稿の本文を取得
function originalAction(){
  echo get_post( $_POST['id'] )->post_content;
  die();
}
add_action( 'wp_ajax_originalAction', 'originalAction' );
add_action( 'wp_ajax_nopriv_originalAction', 'originalAction' );
?>
ローカル環境だとadmin_url( ‘admin-ajax.php’)で上手くadmin-ajax.phpへのパスが取得できなかったので絶対パスで書いた

表示用ソースコード(HTML・JQuery)

<!-- ↓ 投稿ID入りボタン -->
<button data-id="3912" class="ajax-btn">リンク</button>
<button data-id="3894" class="ajax-btn">リンク</button>
<button data-id="3840" class="ajax-btn">リンク</button>

<!-- ↓ 投稿記事本文出力エリア -->
<div class="ajax-display-area"></div>

<script>
jQuery(function($){
    $(document).on("click", ".ajax-btn", function (event) {
        event.preventDefault();
        let id = $(this).data("id");// カスタムデータ属性取得
        $.ajax({
            type: 'POST',
            url: ajaxurl,
            data: {
                'action' : 'originalAction',// functions.phpに書いた関数
                'id': id // 受け渡す情報
            },
            }).done(function (data) { //Ajax通信に成功したときの処理
                // alert('success');
                $(".ajax-display-area").html(data);// 出力エリアに投稿記事本文出力
            }).fail(function (data) { //Ajax通信に失敗したときの処理
                // alert('error');
            }).always(function (data) { //処理が完了した場合の処理
                // alert('always');
        });
    });
});
</script>

普段jQueryのAjax使っててwordpressのAjaxってどういう時に使うんだろう?って思ってたけどwordpressの関数を使うときはwordpressのAjax使ったほうがいいね
wordpressの関数を使いたいならwordpressのAjax使ってそれ以外はjQueryのAjaxって使い分けよっと

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。