Ajax trong wordpress

Ajax là cái gì ?

Ajax là một kỹ thuật trong javaScript, Ajax giúp việc truyền dữ liệu từ backend ra frontend hoặc ngược lại mà không cần load trang. Ví dụ như submit form mà không load lại trang (Contact form 7).

Trên blog của mình các bạn để ý thấy phần comment cho bài viết cũng sumbit form mà không load lại trang, hoặc phần tìm kiếm của website mình nó cũng tự động load những kết quả khi các bạn đánh từ khoá… Tất cả những chức năng đó mình đang sử dụng ajax.

Hướng dẫn ajax trong wordpress

Để hiểu và làm được ajax trong wordpress bạn cần có kiến thức cơ bản về javascript, jquery và một tý kiến thức về lập trình theme wordpress nha!.

Để các bạn dễ hình dung và thực hành, mình sẽ đưa ra một ví dụ cụ thể như sau: Trên giao diện website sẽ hiện 1 button, khi click vào button đó nó sẽ hiện ra 5 bài viết ngẫu nhiên, mỗi lần click lại button đó nó sẽ hiện ra 5 bài khác và tất nhiên nó sẽ ko load lại trang.

Bay giờ mình sẽ chia nội dung kiến thức này ra làm 2 phần:

  • Phần front end sẽ gởi dữ liệu đi, nhận dữ liệu từ server và hiển thị dữ liệu.

  • Phần back end sẽ nhận dữ liệu, xử lý dữ liệu và trả dữ liệu về cho front end.

Phía front end:

– Hiển thị button để click

<div class="content-widget">
    <button class="call-ajax">Bài viết ngẫu nhiên</button>
    <div class="display-post"></div>
</div>

Trong đó <div class=”display-post”></div> chứa nội dung trả về từ server.

– Gởi dữ liệu cho server và nhận giá trị trả về!

$(document).ready(function(){
  $('.call-ajax').click(function(){ // Khi click vào button thì sẽ gọi hàm ajax
      $.ajax({ // Hàm ajax
         type : "post", //Phương thức truyền post hoặc get
         dataType : "html", //Dạng dữ liệu trả về xml, json, script, or html
         url : '&lt;?php echo admin_url('admin-ajax.php');?&gt;', // Nơi xử lý dữ liệu
         data : {
              action: "random", //Tên action, dữ liệu gởi lên cho server
         },
         beforeSend: function(){
              // Có thể thực hiện công việc load hình ảnh quay quay trước khi đổ dữ liệu ra
         },
         success: function(response) {
              //Làm gì đó khi dữ liệu đã được xử lý
              $('.display-post').html(response); // Đổ dữ liệu trả về vào thẻ &lt;div class="display-post"&gt;&lt;/div&gt;
         },
         error: function( jqXHR, textStatus, errorThrown ){
              //Làm gì đó khi có lỗi xảy ra
              console.log( 'The following error occured: ' + textStatus, errorThrown );
         }
     });
  });
});

Thông thường đoạn code được nằm ở file footer.php của theme.

Đoạn code trên thì frontend sẽ gởi cho backend dữ liệu là data. Dữ liệu của ‘data’ được gởi dưới dạng key và value nhé. Chúng ta có thể gởi một lần nhiều giá trị lên cho server xử lý. Trong trường hợp ví dụ này mình gởi lên một action có tên là ‘random‘.

Phía back end:

Thêm đoạn code này trong file functions.php của theme nhé!

<?php 
 add_action('wp_ajax_random', 'random_function');
 add_action('wp_ajax_nopriv_random', 'random_function');
 function random_function() {
    echo '<ul>';
       $getposts = new WP_query(); $getposts->query('post_status=publish&showposts=5&orderby=rand');
       global $wp_query; $wp_query->in_the_loop = true;
       while ($getposts->have_posts()) : $getposts->the_post();
          echo '<li>';
          echo '<a href="'.get_the_permalink().'">'.get_the_title().'</a>';
          echo '</li>';
       endwhile; wp_reset_postdata();
    echo '</ul>';
die(); }
?>

Giải thích:

  • wp_ajax_{tên action}wp_ajax_nopriv_{tên action}: 2 cái này là 2 action dùng để thực thực thì ajax trong wordpress. Ở phía front end mình gởi lên action là “random” vì thế ở trường hợp này mình phải dùng: wp_ajax_random, wp_ajax_nopriv_random. Bạn có thể đọc tài liệu về các action của ajax trong wordpress tại đây

  • random_function là hàm dùng để xử lý dữ liệu. Hàm này sẽ được móc vào 2 action trên => add_action(‘wp_ajax_random’, ‘random_function’);add_action(‘wp_ajax_nopriv_random’, ‘random_function’);

Sau khi đã code xong chức năng, các bạn ra ngoài giao diện test nếu kết quả được như phía dưới là thành công:

<div class="display-post">
    <ul>
       <li><a href="link">text text</li>
       <li><a href="link">text text</li>
       <li><a href="link">text text</li>
       <li><a href="link">text text</li>
       <li><a href="link">text text</li>
    </ul>
</div>

Last updated