【问题标题】:Ajax request in WP plugin return 0WP 插件中的 Ajax 请求返回 0
【发布时间】:2018-03-13 11:13:55
【问题描述】:

我知道这是一个常见问题,我几乎把所有关于它的主题都涂红了,但我找不到适合我情况的答案。

我编写了一个插件来添加国家和语言相关(例如美国->英语|Sapnish)我正在使用类和构造函数来实现插件的功能。它完全正常工作,期望以下功能: 我在所有国家/地区都得到了一个选择,并且在更改此选择操作时使用 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');

但它似乎不起作用,

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

【问题讨论】:

    标签: php jquery ajax wordpress plugins


    【解决方案1】:

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

    【讨论】:

    • 还有一件事,在构造函数中更改: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('wp_ajax_wmu_display_lang_select', array($this, 'wmu_display_lang_select')); add_action('wp_ajax_nopriv_wmu_display_lang_select', array($this, 'wmu_display_lang_select'));
    • 哦,是的,我想过类似的事情!有用!非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多