我尝试使用Ajax执行update_post_meta函数,并尝试在切换更改时将值传递给数据库。但是当Ajax运行时,它总是产生0作为响应。代码如下,请告诉我应该在哪里纠正。
的jQuery
jQuery('.completed').change(function() {
post_id = jQuery(this).data('postid');
if(this.checked) {
var status = "on";
} else {
var status = "off";
}
jQuery.ajax({
url: wpb_ajax_url,
data: 'action=switch_toggle_post&post_id='+post_id+'&status='+status,
dataType: 'JSON',
type: 'POST',
success:function(data){
alert('Saved');
}
});
});
PHP
/* switch Toggle */
add_action('wp_ajax_nopriv_switch_toggle_post', 'switch_toggle_post');
add_action('wp_ajax_switch_toggle_post', 'switch_toggle_post');
function switch_toggle_post(){
add_post_meta( $post_id, '_edit_status', $status, true ) || update_post_meta( $post_id, '_edit_status', $status);
}
答案 0 :(得分:1)
jQuery.ajax({
url: wpb_ajax_url,
使用以下代码替换网址代码
url: '/wp-admin/admin-ajax.php',
答案 1 :(得分:0)
这里的问题是我错过了检索php函数中ajax传递的变量。最后设法让它排序改变PHP代码如下。
add_action('wp_ajax_nopriv_switch_toggle_post', 'switch_toggle_post');
add_action('wp_ajax_switch_toggle_post', 'switch_toggle_post');
function switch_toggle_post(){
$post_id=$_POST['post_id'];
$post_status=$_POST['status'];
$edit_key = '_edit_status';
if ( ! update_post_meta ( $post_id, $edit_key, $post_status) ) {
add_post_meta( $post_id, $edit_key, $post_status, true );
};
}