使用JSON更新Wordpress中的自定义帖子类型

时间:2012-01-24 13:45:43

标签: php json wordpress

我有自定义帖子类型,我们称之为产品。当用户将此产品拖到购物车(droppable jQuery UI)时,我希望自定义帖子类型中名为“amount”的密钥减少一个。

到目前为止,我通过jQuery $ .ajax获得了一个JSON函数,如下所示:

$.ajax({ url: 'http://localhost:8888/MAMP/nogg/wordpress/wp-content/themes/twentyeleven/functions.php',
    data: { postid: +id },
    type: 'post',
    success: function(output) {
        alert("amount is reduced by 1.");
    }
});

这会将帖子的id发送到functions.php,然后我用它来获取我的functions.php中的数据

if(isset($_POST['postid']) && !empty($_POST['postid'])) {
    $postid = $_POST['postid'];
    $response = json_decode($postid);
    remove_amount($response);
}

用postid调用函数。

function remove_amount($postid) {
    $amount = get_post_meta($postid, 'amount', true);
    update_post_meta($postid, 'amount', $amount--);
}

这给了我500错误,我已经确定它是已发送的正确ID,并检查包含密钥(金额)的字段的名称。

那么我的愚蠢自我在这里失踪了什么?

2 个答案:

答案 0 :(得分:0)

您不需要json_decode $_POST['postid']变量。

$.ajax方法序列化您的数据对象,并在请求标头中发送数据,就像常规POST一样。 jQuery没有向您的服务器发送JSON。 (你可以改变你的ajax参数来实际发送JSON,但我不会因为wordpress安装而使你的生活变得复杂。你使用$.ajax的方式很好。)

试试这样:

if(isset($_POST['postid']) && !empty($_POST['postid'])) {
    // Make sure you do something in this function to prevent SQL injection.
    remove_amount($_POST['postid']);
}

此外,数据对象中的+id是什么?这是故意的吗?除此之外,您需要向我们提供导致HTTP 500的PHP错误。

答案 1 :(得分:0)

如果你已经将$ single param设置为true,那么

get_post_meta会返回一个字符串。

那么,您的错误是否与尝试递减字符串值有关?

如果在递减之前将数量val转换为int呢?

function remove_amount($postid) {
    (int)$amount = get_post_meta($postid, 'amount', true);
    update_post_meta($postid, 'amount', $amount--);
}

您收到的错误消息的行(706)是否对应于您处理更新元数据的行?