2 votes

PHP ajouter des conditions dans un tableau de variables (WooCommerce API)

Prenez par exemple le morceau de code suivant, tiré de la documentation de l'API WooCommerce. Ce que j'essaie de faire, c'est d'ajouter des conditions if dans le tableau. Par exemple, je veux que le payment_details pour faire partie de $data basé sur une condition if. Est-ce possible ? Comment ?

<?php
$data = [
    'order' => [
        'payment_details' => [
            'method_id' => 'bacs',
            'method_title' => 'Direct Bank Transfer',
            'paid' => true
        ],
        'billing_address' => [
            'first_name' => 'John',
            'last_name' => 'Doe',
            'address_1' => '969 Market',
            'address_2' => '',
            'city' => 'San Francisco',
            'state' => 'CA',
            'postcode' => '94103',
            'country' => 'US',
            'email' => 'john.doe@example.com',
            'phone' => '(555) 555-5555'
        ],
        'shipping_address' => [
            'first_name' => 'John',
            'last_name' => 'Doe',
            'address_1' => '969 Market',
            'address_2' => '',
            'city' => 'San Francisco',
            'state' => 'CA',
            'postcode' => '94103',
            'country' => 'US'
        ],
        'customer_id' => 2,
        'line_items' => [
            [
                'product_id' => 546,
                'quantity' => 2
            ],
            [
                'product_id' => 613,
                'quantity' => 1,
                'variations' => [
                    'pa_color' => 'Black'
                ]
            ]
        ],
        'shipping_lines' => [
            [
                'method_id' => 'flat_rate',
                'method_title' => 'Flat Rate',
                'total' => 10
            ]
        ]
    ]
];

print_r($woocommerce->post('orders', $data));
?>

Le fait est qu'au lieu de redéfinir le tableau entier, je veux mettre une condition if ici :

order' => [

if ($payment = 'xyz') {

'payment_details' => [
    'method_id' => 'bacs',
    'method_title' => 'Direct Bank Transfer',
    'paid' => true
],

} else {

'payment_details' => [
    'method_id' => 'monopoly',
    'method_title' => 'Monopoly',
    'paid' => true
],

}

Est-il possible de concaténer le tableau à l'aide de points égaux ? .= Merci.

1voto

user2182349 Points 1

"payment_details" fait déjà partie de $data.

Pour y accéder, utilisez :

$paymentDetails = $data['order']['payment_details'];

Vous pouvez alors l'afficher avec :

echo $paymentDetails['method_title'];

Si vous voulez utiliser des conditions "si" :

if ($paymentDetails['method_title'] === 'Monopoly money') {
    echo 'That will not work';
}

Pour modifier les détails du paiement :

$data['order']['payment_details']['method_title'] = 'Changed';

o

$data['order']['payment_details'] = ['method_title' => 'something', 'method_id' => 5, 'paid' => false];

1voto

Ronald Points 36

Vous pouvez définir les payment_details à l'avance et les utiliser dans le tableau $data.

if ($payment = 'xyz') {
    $payment_details = array (  'method_id'    => 'bacs',
                                'method_title' => 'Direct Bank Transfer',
                                'paid'         => true);
}else{
    $payment_details = array (  'method_id'    => 'monopoly',
                                'method_title' => 'Monopoly',
                                'paid'         => true);
}

$data = array (
    'order' => array(
        'payment_details' => $payment_details,
        ......
        ......
    )
);

print_r($woocommerce->post('orders', $data));

0voto

Amjad Points 1354

Je réponds à ma propre question. C'est ce que je cherchais.

$orderData = [];
            if ($payment == 'Monopoly') {
                $orderData['order']['payment_details'] = [];
                $orderData['order']['payment_details']['method_id'] = 'Monopoly';
                $orderData['order']['payment_details']['method_title'] = 'Monopoly';
                $orderData['order']['payment_details']['paid'] = true;
                $orderData['order']['status'] = 'completed';
            }
            else {
                $orderData['order']['status'] = 'pending';
            }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X