Sauter la navigation

Ce sujet est résolu. Voici une description du problème et de la solution.

Problème :
Si vous utilisez WooCommerce et que vous rencontrez des difficultés pour spécifier le prix dans une variation de produit via l'API WooCommerce.
Solution :
1. Créez d'abord le produit variable avec les attributs nécessaires. Voici un exemple de code pour créer un produit variable :

$data = [
    'name'           => 'Test Variable Product',
    'type'           => 'variable',
    'description'    => 'Test Variable Product for REST',
    'lang'           => 'en',
    'translation_of' => null,
    'attributes'     => [
        [
            'id'   =>  $global_attribute_id,
            'visible'   => true,
            'variation' => true,
            'options'   => [
                'Red'
            ]
        ]
    ]
];
$woocommerce->post('products', $data);

2. Ensuite, créez la variation pour ce produit. Assurez-vous d'inclure les prix et les métadonnées nécessaires. Exemple de code pour créer une variation :

$data = [
    'regular_price' => '9.00',
    'lang' => 'en',
    'translation_of' => null,
    'attributes' => [
        [
            'id' => 9,
            'option' => 'Black'
        ]
    ],
    'meta_data'     => [
            [
                'key'   => '_wcml_custom_prices_status',
                'value' => '1',
            ],
            [
                'key'   => '_regular_price_USD',
                'value' => '8',
            ],
            [
                'key'   => '_sale_price_USD',
                'value' => '4',
            ],
            [
                'key'   => '_price_USD',
                'value' => '4',
            ],
        ]
];
print_r($woocommerce->post('products/22/variations', $data));

Si cette solution ne résout pas votre problème ou semble obsolète, nous vous recommandons de consulter les problèmes connus, de vérifier la version du correctif permanent et de confirmer que vous avez installé les dernières versions des thèmes et plugins. Si le problème persiste, n'hésitez pas à ouvrir un nouveau ticket de support sur notre forum de support.

Il s'agit du forum d'assistance technique de WPML, le plug-in multilingue pour WordPress.

Il est accessible à tous, toutefois seuls les clients de WPML peuvent y publier leurs messages. L'équipe du WPML répond sur le forum 6 jours par semaine, 22 heures par jour.

Aucun de nos assistants n'est disponible aujourd'hui sur le forum French. Veuillez créer un ticket, et nous nous le traiterons dès notre prochaine connexion. Merci de votre compréhension.

Ce sujet contient 9 réponses, a 2 voix.

Dernière mise à jour par Nicolas V. Il y a 1 mois.

Assisté par: Nicolas V..

Auteur Articles
Septembre 30, 2024 à 7:54 am #16234720

cyrilV-5

Background of the issue:
Bonjour,
J'utilise le module "Multi-Currency WPML" sur mon site WooCommerce afin d'avoir plusieurs devises (euros / livres / dollars) : https://wpml.org/documentation/related-projects/woocommerce-multilingual/multi-currency-support-woocommerce/.

Je souhaite entrer un prix fixe en dollars pour mes différents produits . Est-ce possible de le faire via l'API Rest : https://wpml.org/documentation/related-projects/woocommerce-multilingual/using-wordpress-rest-api-woocommerce-multilingual/ ?

Cela semble être le cas d'après la doc mais aucun des tests effectués n'a été concluant.

Merci.

Symptoms:
Aucun des tests effectués n'a été concluant.

Questions:
Est-ce possible d'entrer un prix fixe pour l'ensemble de mes produits en dollars via l'API Rest ?

Septembre 30, 2024 à 12:30 pm #16236132

Nicolas V.
Supporter

Les langues: Anglais (English ) Français (Français )

Fuseau horaire: America/Lima (GMT-05:00)

Bonjour,

Merci d'avoir contacté le support de WPML.

- Il est possible de spécifier le prix dans la devise principale et la devise secondaire lors de la création d'un produit via l'API REST.
- N'oubliez pas que, comme dans votre backoffice WP, le prix dans la devise secondaire est assigné au produit dans la langue principale.
- Ces champs sont ensuite copiés et synchronisés dans la traduction du produit.

Veuillez regarder la section "Create products" de cette documentation: https://wpml.org/documentation/related-projects/woocommerce-multilingual/using-wordpress-rest-api-woocommerce-multilingual/

Exemple:

$data    = [
    'name'              => 'English Test Post',
    'type'              => 'simple',
    'regular_price'     => '10.00',
    'description'       => 'This is a Simple English Test Post',
    'short_description' => 'This is a Simple English Test Post',
    'categories'        => [ [ 'id' => 10 ], [ 'id' => 12 ] ],
    'images'            => [
        [ 'src' => '<em><u>lien caché</u></em>', 'position' => 0 ],
        [ 'src' => '<em><u>lien caché</u></em>', 'position' => 1 ]
    ],
    'lang'              => 'en',
    'custom_prices'     => [
        'EUR' => [ 'regular_price' => 1999, 'sale_price' => 1500 ],
        'USD' => [ 'regular_price' => 2100, 'sale_price' => 2099 ]
    ]
];
$product = $woocommerce->post( 'products', $data );
Septembre 30, 2024 à 1:12 pm #16236375

Nicolas V.
Supporter

Les langues: Anglais (English ) Français (Français )

Fuseau horaire: America/Lima (GMT-05:00)

Re bonjour,

Désolé mais je viens d'apprendre qu'il y a un bug reporté pour l'assignation de prix personnalisés via l'API REST. C'est sans doute pour cela que vous n'arrivez pas à les assigner.

Cela sera résolu dans la prochaine version de WooCommerce Multilingual (WCML). En attendant je vous partage une solution d'appoint fournie par nos devs:
- Set _wcml_custom_prices_status to 1 to enable custom prices for this product.
- If EUR is default and USD is secondary, you can now set the prices with the following keys: _regular_price_USD, _sale_price_USD, _price_price_USD.

For example, using WC's PHP wrapper it would be like this:

use Automattic\WooCommerce\Client;

$wc = new Client( $url, $key, $secret, $options );

$data = [
	'name'          => 'REST Product with custom prices',
	'type'          => 'simple',
	'description'   => 'Test Product for REST',
	'regular_price' => '10',
	'sale_price'    => '5',
	'lang'          => 'en',
	'meta_data'     => [
		[
			'key'   => '_wcml_custom_prices_status',
			'value' => '1',
		],
		[
			'key'   => '_regular_price_USD',
			'value' => '8',
		],
		[
			'key'   => '_sale_price_USD',
			'value' => '4',
		],
		[
			'key'   => '_price_USD',
			'value' => '4',
		],
	]
];

var_dump( $wc->post( 'products', $data ) );
octobre 3, 2024 à 1:33 pm #16250357

cyrilV-5

Bonjour et merci pour votre retour. Je vais tester cette solution et je reviens vers vous.

octobre 3, 2024 à 4:51 pm #16251520

Nicolas V.
Supporter

Les langues: Anglais (English ) Français (Français )

Fuseau horaire: America/Lima (GMT-05:00)

Bonjour,

Très bien, je laisse donc le ticket en attente de votre feedback.

Bonne fin de journée.

octobre 7, 2024 à 10:19 am #16260280

cyrilV-5

Bonjour Cyril,

Je reviens vers vous suite à nos tests effectués.

Nous avons remplis les informations demandés au niveau des meta_data mais WooCommerce et WCML n'a pas l'air de prendre en compte ces paramètres non plus.

Voici ce que nous avons envoyé:
Method: PUT
Route: products/88027
Payload:

{
"sku": "00010MS",
"regular_price": "208.333333",
"type": "variable",
"meta_data": [
{
"key": "_regular_price_USD",
"value": "325.00"
},
{
"key": "_price_USD",
"value": "325.00"
},
{
"key": "_wcml_custom_prices_status",
"value": "1"
},
{
"key": "_wpm_gtin_code",
"value": "3661883275359"
},
{
"key": "_woosea_gtin",
"value": "3661883275359"
}
]
}

Merci pour votre aide.

Capture d’écran 2024-10-07 121830.jpg
octobre 7, 2024 à 4:58 pm #16263057

Nicolas V.
Supporter

Les langues: Anglais (English ) Français (Français )

Fuseau horaire: America/Lima (GMT-05:00)

Bonjour,

Je pense qu'il y a quelques changements à faire car je note les points suivants:
1. Il manque le paramètre lang
2. Il s'agit d'un produit variable, il y a un exemple dans la documentation mais il faut:
- Créer le produit variable
$woocommerce->post('products', $data);
- Ensuite créer les variations avec le prix de chaque variation (le prix va dans la variation)
$woocommerce->post( 'products/25/variations/batch', $data ); ou 25 est l'ID du produit variable.

Je vous redonne le lien: https://wpml.org/documentation/related-projects/woocommerce-multilingual/using-wordpress-rest-api-woocommerce-multilingual/

Essayez peut être de commencer avec un produit simple pour isoler le problème des prix et une fois que cela fonctionne correctement passez à un produit variable plus complexe.

octobre 7, 2024 à 5:46 pm #16263193

cyrilV-5

Bonsoir,

Merci pour votre retour, nous allons essayer avec un produit simple. Pour information nous ne souhaitons pas créer des produits mais uniquement actualiser des produits simples et variables existants.

octobre 11, 2024 à 12:26 pm #16279623

cyrilV-5

Bonjour,

Je reviens vers vous pour vous informez que cela a bien fonctionné avec un produit simple. J'ajoute pour exemple un screen.

En revanche cela ne fonctionne pas sur un produit variable. Serait-il possible d'avoir un exemple ?

Merci.

Capture d’écran 2024-10-11 142504.jpg
octobre 11, 2024 à 3:57 pm #16280563

Nicolas V.
Supporter

Les langues: Anglais (English ) Français (Français )

Fuseau horaire: America/Lima (GMT-05:00)

Bonjour,

Selon la documentation de lien caché">WooCommerce le prix devrait être spécifié dans la variation.

1. Creation du produit variable:

$data = [
    'name'           => 'Test Variable Product',
    'type'           => 'variable',
    'description'    => 'Test Variable Product for REST',
    'lang'           => 'en',
    'translation_of' => null,
    'attributes'     => [
        [
            'id'   =>  $global_attribute_id,
            'visible'   => true,
            'variation' => true,
            'options'   => [
                'Red'
            ]
        ]
    ]
];
$woocommerce->post('products', $data);

2. Création de la variation (en supposant que l'ID du produit variable que l'on vient de créer soit 22):

$data = [
    'regular_price' => '9.00',
    'lang' => 'en',
    'translation_of' => null,
    'attributes' => [
        [
            'id' => 9,
            'option' => 'Black'
        ]
    ],
    'meta_data'     => [
            [
                'key'   => '_wcml_custom_prices_status',
                'value' => '1',
            ],
            [
                'key'   => '_regular_price_USD',
                'value' => '8',
            ],
            [
                'key'   => '_sale_price_USD',
                'value' => '4',
            ],
            [
                'key'   => '_price_USD',
                'value' => '4',
            ],
        ]
];

print_r($woocommerce->post('products/22/variations', $data));