正在更新WordPress用户元数据数组(意外的多个数组)

时间:2013-08-17 作者:souporserious

因此,我正在尝试更新之前使用此函数存储的用户元数据数组:

function oe_charge_customer( $customer ) { 

    // load the stripe libraries
    require_once(STRIPE_BASE_DIR . \'/lib/Stripe.php\');

    // check if in test mode or not
    check_stripe_api();

    // counter
    $i = $customer[\'i\'];

    // get user meta, if any
    $payment_args = get_user_meta( $customer[\'user_id\'], \'oe_customer_details\' );

    // update paid value to true
    $payment_args[0][\'payments\'][$i][\'paid\'] = 1;

    // attempt to charge the customer\'s card
    try {

        $charge = Stripe_Charge::create(array(
                \'amount\'    => $customer[\'amount\'] * 100,
                \'currency\'  => \'usd\',
                \'customer\'  => $customer[\'cust_id\']
            )
        );

        // update user profile to show paid
        update_user_meta( $customer[\'user_id\'], \'oe_customer_details\', $payment_args );

    } catch (Exception $e) {

        wp_die($e);

    }

}
我得到了一些预期的结果,但每次更新时它都会不断地将其放入一个新的数组中。知道为什么会这样吗?我似乎无法控制自己。更新后,我得到以下信息:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => Array
                                        (
                                            [customer] => Array
                                                (
                                                    [name] => 
                                                    [id] => cus_2Oo1hyvYyZsaj0
                                                    [user_id] => 18
                                                )

                                            [payments] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [amount] => 16
                                                            [date] => 1376710188
                                                            [paid] => 0
                                                        )

                                                    [1] => Array
                                                        (
                                                            [amount] => 4
                                                            [date] => 1376710238
                                                            [paid] => 0
                                                        )

                                                )

                                        )

                                    [payments] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [paid] => 0
                                                )

                                        )

                                )

                        )

                    [payments] => Array
                        (
                            [1] => Array
                                (
                                    [paid] => 1
                                )

                        )

                )

        )

)

1 个回复
最合适的回答,由SO网友:epilektric 整理而成

看起来像是get_user_meta() 返回类似这样的数组。

array(2) {
   [0]=>
       array(1) {
           [0]=>
       }

   [1]=>
       array(1) {
           [0]=>
       }
}
那么什么时候update_user_meta() 将数组存储在另一个数组中,如下所示

编辑:事实证明get_user_meta() 在获取结果时将其封装在数组中。

array(1) {
    [0]=>
        array(2) {
           [0]=>
               array(1) {
                   [0]=>
               }
           [1]=>
               array(1) {
                   [0]=>
               }
        }
}
然后,它会再次被检索和保存,每次都会添加一个新的级别。

对于这个问题,有一个简单但违反直觉的解决方案。设置的最后一个参数get_user_meta()true.

get_user_meta($id,$key,true);`
如果是的话false 它返回一个数组,如果是true 它返回一个值,该值可以是数组本身。

此处提供更多信息。https://stackoverflow.com/questions/7746887/storing-php-arrays-in-wordpress-user-meta-database

结束

相关推荐

Exclude an array

我正在将edit post仪表板移动到前端。所以这里有一个案例,我必须查询,一个用于产品附件,另一个用于所有人。现在,我想从所有附件中排除产品附件查询这里是一个如何从WordPress Codex中排除帖子缩略图的示例:<?php $args = array( \'post_type\' => \'attachment\', \'numberposts\' => -1, \'post_status\' => nu