带有Wordpress的Ajax update_post_meta总是给出0响应

时间:2015-03-17 08:43:10

标签: php jquery ajax wordpress

我尝试使用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);
}

2 个答案:

答案 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 );   
    }; 
}