Hướng Dẫn Fix Lỗi Load Ajax Khi Dùng WPML

Khi bạn làm việc chung giữa WordPress và WPML để xử lý đa ngôn ngữ trong website của bạn. Sẽ có trường hợp bạn dùng ajax để load bài theo từng ngôn ngữ. Nếu bình thường bạn code để hiện 5 tin mới nhất trong wordpress, theo code bên dưới

<?php

$news_lastest = new WP_Query([
    'post_type' => 'post',
    'posts_per_page' => 5,
    'post_status' => 'publish'
]);

thì sẽ không có vẫn đề gì phát sinh khi ở trang đó bạn là nguôn ngữ tiếng Việt hay Anh (/tin-tuc hoặc link /news)

Ok, WPML nó sẽ tự xử lý can thiệp vào câu query bên trên để lấy 5 bài mới nhất cho bạn.

Nhưng trong trường hợp bạn sài ajax để lấy 5 bài mới nhất, bạn phải viết javascript để get thông tin từ server trả về

  1. Đoạn mã javascript:
    <script>
    jQuery.post( '/wp-admin/admin-ajax.php', {
        action: 'get-news-lastest',
    }, function( data) {
        
    })
    </script>
  2. Đoạn mã sử lý ở server:
    <?php
    
    add_action( 'wp_ajax_get-news-lastest', 'wp_ajax_get_news_lastest_func' );
    add_action( 'wp_ajax_get-news-lastest', 'wp_ajax_get_news_lastest_func' );	
    
    function wp_ajax_get_news_lastest_func() {
        if( isset( $_POST['action'] ) 
            && $_POST['action'] == 'get-news-lastest'
        ) {
            $data_return = [];
            $news_lastest = new WP_Query([
                'post_type' => 'post',
                'posts_per_page' => 5,
                'post_status' => 'publish'
            ]);
            if( $news_lastest->have_posts() ) {
                while ($news_lastest->have_posts() ) {
                    $news_lastest->the_post();
                    $row  = new \Stdclass;
                    $row->name = get_the_title();
                    $row->link = get_the_permalink();
                    $data_return[] = $row;
                }
                wp_reset_postdata();
                wp_send_json_success( $data_return );
            }
        }
        wp_send_json_error();
    }

     

    Ở ngôn ngữ chính thì đoạn mã trên trả về đúng. Nhưng nếu chuyển qua ngôn ngữ tiếng Anh thì nó vẫn trả sai, và để fix trường hợp này mình chỉ cần chỉnh lại đoạn mã ở client. Đoạn mã javascript sẽ được viết lại như sau, truyền thêm tham số lang=”lang code của ngôn ngữ hiện tại”

    <script>
    jQuery.post( '/wp-admin/admin-ajax.php', {
        action: 'get-news-lastest',
        lang: 'lang code hiện tại'
    
    }, function( data) {
        
    })
    </script>
Rate this post

You May Also Like

About the Author: truongluu

Leave a Reply

Your email address will not be published. Required fields are marked *