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

Php 使用JSON更新Wordpress中的自定义帖子类型,php,json,wordpress,Php,Json,Wordpress,我有一个自定义的帖子类型,让我们称之为产品。当用户将此产品拖到购物车(可拖放jQuery UI)时,我希望自定义帖子类型中名为“amount”的键减少一个 到目前为止,我已经通过jQuery$.ajax实现了一个JSON函数,如下所示: $.ajax({ url: 'http://localhost:8888/MAMP/nogg/wordpress/wp-content/themes/twentyeleven/functions.php', data: { postid: +id },

我有一个自定义的帖子类型,让我们称之为产品。当用户将此产品拖到购物车(可拖放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.");
    }
});
if(isset($_POST['postid']) && !empty($_POST['postid'])) {
    // Make sure you do something in this function to prevent SQL injection.
    remove_amount($_POST['postid']);
}
这会将post的id发送到functions.php,然后我使用它来获取functions.php中的数据

if(isset($_POST['postid']) && !empty($_POST['postid'])) {
    $postid = $_POST['postid'];
    $response = json_decode($postid);
    remove_amount($response);
}
调用带有posted的函数

function remove_amount($postid) {
    $amount = get_post_meta($postid, 'amount', true);
    update_post_meta($postid, 'amount', $amount--);
}
这给了我一个500错误,我已经确定发送的ID是正确的,并检查了包含密钥(金额)的字段的名称


那么,我的愚蠢的自我在这里遗漏了什么呢?

您不需要对
json\u解码
这个
$\u POST['postid']
变量

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

试着这样做:

$.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.");
    }
});
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错误。

get\u post\u如果您已将$single参数设置为true,那么meta将返回一个字符串

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

在递减之前将数值val转换为整数怎么样

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

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

好的,我解决了它。显然,WP函数文件中有一些东西不赞成这样处理json内容。因此,我没有认识到标准的WP函数(比如get_post_meta),我所做的是创建一个空白页面,让它使用带有php代码的自定义模板,然后在jquery代码中链接到该WP页面

$.ajax({ url: 'http://localhost:8888/MAMP/nogg/wordpress/?page_id=43',
               data: {postid2: id },
               type: 'post',
               success: function(output) {
      }
});
页面_id=43是使用以下模板的页面:

<?php
/**
* Template Name: ajax template
* Description: ajax *
* @package WordPress
*/


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

function remove_amount($postid) {
$amount = get_post_meta($postid, 'amount', true);
if($amount > 0):
    update_post_meta($postid, 'amount', $amount-1);
    echo $amount-1;
endif;
}

是的,这是一个很好的观点。在我来这里之前,我只是把它扔进去做最后的努力。这两种方法都不起作用。感谢您的回答,tho,澄清了何时以及为什么使用json_decode!:)啊,是的!我可以查看php_error.log以了解详细信息,完全分散在那里。错误日志显示:PHP致命错误:在第706行的/Applications/MAMP/bin/MAMP/nogg/wordpress/wp content/themes/twentyeleven/functions.PHP中调用未定义的函数get_post_meta(),这完全让我难以置信。functions.php中是否存在妨碍其处理json的因素?我是否应该尝试使用该函数加载一个新的.php文件?