我有一个名为“sales”的自定义meta\\u密钥,该密钥保存销售人员进行的所有销售的信息,并带有一个标志,表明是否已授权、等待授权或是否已被拒绝。
Wordpress将每个销售保存为usermeta表中的一个单独的行,我对这个表没有任何问题,我所坚持的是更新特定的销售状态;i、 e将其从挂起(2)更改为已拒绝(0)或已批准(1)。
我在其他论坛等上尝试了几种方法来实现这一点,但似乎我可能首先存储的元数据不正确,因为所有的示例都很有趣,每个用户只有一行自定义meta\\u键;因此,帖子建议更新该值,删除与该键相关的所有数据,然后上传修改后的数组。
我目前有以下代码,但它并没有像我想象的那样工作,因为它正在将数据保存到另一个数组中,以便进一步嵌套。
if(isset($_POST[\'approved\'])) {
$saleStatus = 2;
switch ($_POST[\'approved\']) {
case \'approve\':
$saleStatus = 1;
break;
case \'reject\':
$saleStatus = 0;
break;
}
$sales = get_user_meta($_POST[\'repID\'], \'sales\');
foreach ($sales as $key => $sale) {
if($sale[\'reg\'] === $_POST[\'carReg\']) {
$sales[$key][\'approved\'] = $saleStatus;
}
}
update_user_meta( $_POST[\'repID\'], \'sales\', $sales);
}
UPDATED
$sales = get_user_meta($_POST[\'repID\'], \'sales\', true);
foreach ($sales as $key => $value) {
if($value === $_POST[\'carReg\']) {
$sales[0][\'approved\'] = $saleStatus; //This is overwriting all meta_values making them duplicates
}
}
update_user_meta( $_POST[\'repID\'], \'sales\', $sales);
ADDING SALE
if(isset($_POST[\'customer-name\']) && isset($_POST[\'make\']) && isset($_POST[\'model\']) && isset($_POST[\'reg\']) && isset($_POST[\'condition\'])) {
$branch = sanitize_text_field($GLOBALS[\'user_rep\'][\'repBranch\']);
$customer_name = sanitize_text_field($_POST[\'customer-name\']);
$make = sanitize_text_field($_POST[\'make\']);
$model = sanitize_text_field($_POST[\'model\']);
$reg = sanitize_text_field($_POST[\'reg\']);
$condition = sanitize_text_field($_POST[\'condition\']);
$newSales = array(
\'branch\' => $branch,
\'customer_name\' => $customer_name,
\'make\' => $make,
\'model\' => $model,
\'reg\' => $reg,
\'condition\' => $condition,
\'time\' => time(),
\'approved\' => 2
);
update_user_meta(wp_get_current_user()->ID, \'sales\', $newSales);
}
最合适的回答,由SO网友:user1049961 整理而成
问题是这条线
$sales = get_user_meta($_POST[\'repID\'], \'sales\');
将其更改为
$sales = get_user_meta($_POST[\'repID\'], \'sales\', true);
最后一个参数表示,您将获得一个值-一个数组。否则,将在另一个数组中获得一个数组。
https://developer.wordpress.org/reference/functions/get_post_meta/
编辑:在阅读完评论后,因为你有多行的meta,你应该这样做
update_post_meta
在foreach循环中:
$sales = get_user_meta($_POST[\'repID\'], \'sales\');
foreach ($sales as $key => $sale) {
$old_sale_data = $sale;
if($sale[\'reg\'] === $_POST[\'carReg\']) {
$sale[\'approved\'] = $saleStatus;
update_user_meta( $_POST[\'repID\'], \'sales\', $sale, $old_sale_data);
}
}
https://codex.wordpress.org/Function_Reference/update_post_meta
顺便说一句,将销售额保存为数组中的用户元并不是一个好主意,除非您要对数据所做的一切都是显示它。以这种方式保存数据几乎不可能对数据进行查询、搜索和报告。你最好创建一个自定义的帖子类型
sales
为每笔销售节省元数据,或者更好地为
sales
...