PRESTASHOP – Corriger le problème de déclinaisons de prix avec Google Shopping
Bonjour à tous,
Comme vous le savez, Prestashop possède un problème avec les prix des déclinaisons produits.
En effet, Google ne détecte aucun changement de prix lors du passage du robot sur les urls des déclinaisons et en voici les raisons.
D’ou vient le problème ?
La raison est simple, les prix des déclinaisons produits sont changés dynamiquement avec du Javascript.
Par exemple à la fin de votre url de produit d’une déclinaison on peut apercevoir un #/xxx-xx (qui correspond à la déclinaison produit).
Le #/ n’est pas détectable en php, et, une fois la page chargée, c’est le javascript qui prend le relai et vous affiche les bons prix.
Or, Google (ou les robots en général) n’execute pas le Javascript, il interprète donc le prix de votre produit par défaut.
Comment corriger le problème ?
Pour remédier à ce problème, nous avons trouvé une solution rapide,
pour cela il faut modifier votre fichier product.tpl de votre thème (sous prestashop 1.6)
recherchez ce code ci dans votre fichier:
<meta id="meta_price" itemprop="price" content="{$productPrice}" />
et remplacer le par celui ci:
{if isset($smarty.get.price)}
<meta id="meta_price" itemprop="price" content="{$smarty.get.price|replace:',':'.'}" />
{else}
<meta id="meta_price" itemprop="price" content="{$productPrice}" />
{/if}
en fait, ce morceau de code permet de placer le prix de la déclinaison si elle se trouve dans l’url sous cette forme: ?price=xxx
Modifier le flux
Il faut en dernière partie modifier le flux de google pour qu’il soit pris en compte.
Soit vous rajouter manuellement entre le .html et le #/ de votre url, le prix de la déclinaison
ex: https://www.monsite.com/35-mon-produit.html?price=389,00#/92-xxx_h
Ou, si vous utilisez shoppingflux, allez dans le module shoppingfluxexport/shoppingfluxexport.php
dans la methode _getCombinaisons
remplacez cette ligne:
$ret .= '<'.$this->_translateField('combination_link').'>getProductLink($product).$product->getAnchor($id, true).']]>_translateField('combination_link').'>';
par celle ci:
$ret .= '<'.$this->_translateField('combination_link').'>getProductLink($product)."?price=".$product->getPrice(true, $id, 2, null, false, true, 1).$product->getAnchor($id, true).']]>_translateField('combination_link').'>';
Il faut attendre ou renvoyer votre flux et tout devrait rentrer dans l’ordre.
En espèrant que cela vous aidera.
N’hésitez pas à poster vos solutions afin d’en proposer plusieurs, celle-ci n’est certainement pas la meilleure mais fonctionne et est rapide à mettre en place.
Enjoy 😉