更新自定义键中的meta_value

时间:2016-07-03 作者:Pierre

我有一个名为“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);    
}

1 个回复
最合适的回答,由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...