我知道这是一个共同的问题,我几乎所有关于它的主题都是红色的,但我找不到适合我案例的答案。
我写了一个插件来添加国家和语言相关(例如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');
但它似乎不起作用,
你有什么想法吗?我认为这是一个愚蠢的错误或错误,但我无法找到它......
答案 0 :(得分:0)
将您的JS请求中的action: 'wmu-display-lang-select',
更改为action: 'wmu_display_lang_select',
,它应该有效。