WP插件中的Ajax请求返回0

时间:2018-03-13 11:13:55

标签: php jquery ajax wordpress plugins

我知道这是一个共同的问题,我几乎所有关于它的主题都是红色的,但我找不到适合我案例的答案。

我写了一个插件来添加国家和语言相关(例如USA-> English | Sapnish)我正在为插件的函数使用Class和构造函数。它完全正常工作,期望以下功能: 我在所有国家/地区得到一个选择,并且在更改此选择操作时使用ajax的另一个函数,传递的数据是正常的,但响应始终返回0,以管理员连接或不连接。

这是我的ajax:

$('#sel-country-back').change(function(){
    var post_id = $(this).val();
    change_status(post_id);
})

function change_status(id) {
    $.ajax({
        url: window.location.origin + '/wp-admin/admin-ajax.php',
        data: {
            action: 'wmu-display-lang-select',
            post_id: id,
        },
        type: 'post',
        success:function(data){
            $('#lang-back').html(data);
        },
        error: function(errorThrown){
            $('#lang-back').html('<select name="langBack" id="sel-lang-back"><option value="default" class="no-lang-option">Aucune langue associée</option></select>');
        }
    });
}

和我的功能

public function wmu_display_lang_select()
{
    if ($_POST['post_id']) {
        $id = sanitize_text_field($_POST['post_id']);

        $lang = self::getLang($id);
        if ($lang !== false) {
            $response = array(
                'status' => 200,
                'content' => $lang
            );
        }
        else {
            $response = array(
                'status' => 201,
                'message' => __('Le fichier demandé n\'existe pas', 'cadwork')
            );
        }
        die(json_encode($response));
    }
}

将操作添加到构造函数

public function __construct()
{
    add_action('admin_menu', array($this, 'wmu_add_menu'));
    add_action('wp_ajax_wmu_display_lang_select', 'wmu_display_lang_select');
    add_action('wp_ajax_nopriv_wmu_display_lang_select', 'wmu_display_lang_select');
}

我尝试在类实例化之后将add_action放在类之外

$wmu = new WB_MultiLang_URL();
add_action('wp_ajax_wmu_display_lang_select', 'wmu_display_lang_select');
add_action('wp_ajax_nopriv_wmu_display_lang_select', 'wmu_display_lang_select');

但它似乎不起作用,

你有什么想法吗?我认为这是一个愚蠢的错误或错误,但我无法找到它......

1 个答案:

答案 0 :(得分:0)

将您的JS请求中的action: 'wmu-display-lang-select',更改为action: 'wmu_display_lang_select',,它应该有效。