Você pode reproduzir esse problema no tema padrão do Wordpress (por exemplo, Storefront)?
SIM
Você pode reproduzir esse problema quando todos os outros plug-ins estão desativados, exceto WooCommerce, Polylang e Hyyan WooCommerce Polylang Integration?
SIM
Quais versões e configurações do produto você usa quando esse problema ocorre?
PHP: PHP 7.0
WordPress: 4.9.2
WooCommerce: 3.2.6
Polylang: 2.2.8
Integração Hyyan WooCommerce Polylang: 1.0.4
Navegador: Chrome mais recente
Passos para reproduzir
Configure pelo menos 2 idiomas, digamos EN = padrão, FR
Defina um produto, traduza para os 2 idiomas e defina o estoque para 3
Adicione 1 desse produto na cesta enquanto em FR
prossiga para finalizar a compra e pagar com uma plataforma de pagamento como Paypal ou Payzen.
Uma vez feito o pagamento, feche a página antes de redirecionar para o seu site.
Certifique-se de que um IPN foi enviado para o seu site.
Seu pedido for recebido, o estoque do produto será 1 em EN e 3 em FR!
O que eu esperava
para ter 2 em estoque em todos os idiomas, já que eram 3 e você comprou 1.
O que aconteceu em vez disso
Quando chamado via IPN, a atualização de estoque atualiza 2 vezes o idioma padrão em vez de uma vez cada, eu cavei e encontrei o problema que pode ser corrigido assim:
removendo essas linhas em Stock.php
$productID = Utilities::get_order_item_productid($item);
$productObject = wc_get_product($productID);
De alguma forma, quando chamada através do IPN, a função get_order_item_productid retorna o id do produto do idioma padrão em vez do produto selecionado.
Eu verifiquei o wc-stock-function.php e alterei essas duas linhas desta forma:
$productObject = $item->get_product();
$productID = $productObject->get_id();
Então, eu removi o
unset($translations[$orderLang]);
e simplesmente ignorou o produto atual no ciclo de traduções:
if ($ID == $productID) continue;
quando chamada através do IPN, a função get_order_item_productid retorna o id do produto do idioma padrão em vez do produto selecionado.
Sim, o próprio url IPN seria tratado pela Polylang como no idioma padrão.
[embora o nº 218 sugira que pode haver IPN específico de um idioma e proponha mudanças para garantir que isso não aconteça]
Como suas alterações são limitadas para se aplicarem apenas a chamadas IPN?
Você pode enviar suas alterações como uma solicitação Pull para que fique claro para revisar a diferença das alterações?
Uma pergunta ingênua: o problema também não é resolvido por não usar o IPN? Qual é a vantagem de usar IPN neste caso? (outros provedores de pagamento não usam IPN e também não é necessário para o PayPal, então apenas para esclarecer ...)
As alterações não parecem afetar as chamadas não IPN, estou usando meu patch na produção e não tenho nenhum problema.
Enviei uma solicitação de mudança.
Eu realmente não vejo como você pode evitar o uso de IPN. Você pode me explicar como você não está usando?
Não usar o IPN faria com que você confiasse inteiramente no PDT, que geralmente é a página para a qual eles são redirecionados após o pagamento. No nosso caso, mais de 50% dos nossos clientes não esperam até serem redirecionados (definido para 1 segundo) para o nosso site após o pagamento, o que significa que, sem IPN, metade do nosso pedido não mudaria para o pagamento concluído. O IPN nos permite ter certeza de que o pagamento do pedido foi atualizado e não consigo entender como você não estaria usando isso.
bem, o checkout padrão do Stripe, por exemplo, tem uma caixa de diálogo pop-up ou campos de cartão na página (ou o botão Apple Pay na página), parece controlar tudo por meio de um conjunto de javascripts e chamadas ajax, não estou ciente disso tem um equivalente ao Paypal IPN.
Você está usando a integração do Paypal fornecida pelo WooCommerce ou um dos outros plug-ins?
Como javascript está do lado do cliente, não é confiável. JS pode falhar ou ser bloqueado. Os pop-ups também costumam ser bloqueados. Além disso, muitos de nossos clientes executam o IE com Win7, que é conhecido por sua má implementação de Javascript.
Não estamos usando Paypal, estamos usando PayZen e Plugins Ingenico, ambos trabalham com IPN.
Você não precisa usar o IPN com nenhum plugin, mas está sempre disponível, mesmo no Stripe.
https://github.com/jatskie/stripe/blob/master/ipn.php
Implementamos porque dá certeza, também, no nosso ramo de trabalho, as pessoas pedem o almoço antes das 10h15 e são entregues antes das 12h, portanto, se o pagamento não for avisado, o cliente não receberá o almoço. Nesta questão de importância de tempo, não podemos confiar no acaso e devemos implementar o IPN para ter certeza de que um pedido pago será processado dentro do nosso prazo.
Se pagarmos com transferência, o banco não está funcionando.
@carlituxman não é um detalhe suficiente para que alguém possa comentar, mas é bem provável que a situação tenha mudado com o woocommerce 3.3.5 devido à alteração do woocommerce ajax novamente. você precisaria testar com ambas as solicitações de pull aberto, uma das quais é sugerida para corrigir esse problema e a outra corrige o problema de ajax.
desculpa. qual é o problema de correção do Ajax?
Eu acho que você disse # 329?
Apliquei as correções # 329 e # 300 e não funcionou.
Eu tenho o mesmo problema # 332
Bem, qual versão do woocommerce você está usando?
woocommerce 3.3.5
Existe uma solução para este problema? É MUITO ruim em uma de nossas lojas. Temos muitos produtos exclusivos (com apenas 1 item em estoque) e se for pedido em um idioma, o estoque no outro idioma permanece em 1 (e o estoque para o idioma principal é definido como -1). Agora temos alguns pedidos duplos de um produto que ainda está em estoque em um idioma, mesmo que esteja esgotado em outro ...
você pode verificar minha correção e fazer alterações no arquivo de estoque no plug-in:
https://github.com/hyyan/woo-poly-integration/pull/300/files
ainda não foi aceito, mas estou usando há um mês sem problemas.
Eu espero que eles aceitem meu pedido de puxar um dia ...
Obrigado @Tii , vou tentar a sua correção. Espero que eles aceitem o pedido de pull. Não é a primeira correção de bug a adicionar aos arquivos principais. Minha versão atual do plugin não é atualizável. :(
Essa correção não me ajudou .. Estoque só muda naquele idioma, o que eu "compro". Criei estoques com variáveis. Alguém tem solução?
@Stibo, por que sua versão atual do plugin não é atualizável?
Se você teve que fazer outras alterações, por que não criar seu próprio branch no github, verifique suas alterações lá e faça uma solicitação de pull.
Esta opção / correção não funcionou para mim. :(
Na verdade, eu reescrevi todo o código
`
mudança de função protegida (WC_Order_Item_Product $ item, $ action = self :: STOCK_REDUCE_ACTION) {
$productID = Utilities::get_order_item_productid($item);
$productObject = wc_get_product($productID);
$orderLang = pll_get_post_language($item->get_order_id());
if ($productObject && $orderLang) {
$translations = Utilities::getProductTranslationsArrayByObject($productObject);
$isManageStock = $productObject->managing_stock();
$method = ($action === self::STOCK_REDUCE_ACTION) ?
'decrease' :
'increase';
$change = ($action === self::STOCK_REDUCE_ACTION) ?
Utilities::get_order_item_quantity($item) :
Utilities::get_order_item_change($item);
$mainStock = null;
$mainStockId = null;
$products = array();
foreach ($translations as $ID) {
$product = wc_get_product($ID);
$stock = $product->get_stock_quantity();
if ($mainStock === null) {
$mainStock = $stock;
$mainStockId = $ID;
} else {
if ($method === 'decrease') {
if ($mainStock > $stock) {
$mainStock = $stock;
$mainStockId = $ID;
}
} else {
if ($mainStock < $stock) {
$mainStock = $stock;
$mainStockId = $ID;
}
}
}
}
unset($products[$mainStock]);
foreach ($translations as $ID) {
if ($ID === $mainStockId) continue;
if ($isManageStock) {
\wc_update_product_stock($ID, $change, $method);
}
$general = Settings::getOption(
'general', MetasList::getID(), array('total_sales')
);
if (in_array('total_sales', $general)) {
update_post_meta($ID, 'total_sales', get_post_meta($mainStockId, 'total_sales', true)
);
}
}
}
}
`
Portanto, minha abordagem foi verificar o estoque que é diferente dos outros e sincronizar todos os produtos nele.
Não é muito eficiente, mas está funcionando bem até que possamos obter o idioma por meio de um IPN.
Oi tii,
Vou experimentar hoje :)
Você pode colar todo o código para a alteração da função protegida?
Tenho o mesmo problema :/
Oi tii,
Vou experimentar hoje :)
note que eu não fiz o trabalho para as variações
Oi tii,
Vou experimentar hoje :)note que eu não fiz o trabalho para as variações
Você pode colar todo o código para a alteração da função protegida?
Oi tii,
Vou experimentar hoje :)note que eu não fiz o trabalho para as variações
Você pode colar todo o código para a alteração da função protegida?
Não tenho certeza se entendi, eu copiei toda a função ...
Oi tii,
Vou experimentar hoje :)note que eu não fiz o trabalho para as variações
Você pode colar todo o código para a alteração da função protegida?
Não tenho certeza se entendi, eu copiei toda a função ...
Não funcionou. Eu tenho o mesmo problema: /. https://i.ibb.co/kHNW6fc/stockissue.jpg
Oi tii,
Vou experimentar hoje :)note que eu não fiz o trabalho para as variações
Você pode colar todo o código para a alteração da função protegida?
Não tenho certeza se entendi, eu copiei toda a função ...
Não funcionou. Eu tenho o mesmo problema: /. https://i.ibb.co/kHNW6fc/stockissue.jpg
Você substituiu a alteração de função de wp-content / plugins / woo-poly-integration / src / Hyyan / WPI / Product / Stock.php pelo meu?
Estou usando há um mês e não tive um único problema.
Oi tii,
Vou experimentar hoje :)note que eu não fiz o trabalho para as variações
Você pode colar todo o código para a alteração da função protegida?
Não tenho certeza se entendi, eu copiei toda a função ...
Não funcionou. Eu tenho o mesmo problema: /. https://i.ibb.co/kHNW6fc/stockissue.jpg
Você substituiu a alteração de função de wp-content / plugins / woo-poly-integration / src / Hyyan / WPI / Product / Stock.php pelo meu?
Estou usando há um mês e não tive um único problema.
sim.
A correção também não funciona para mim ...
@fkoomek @bmpf @Stibo @Tii tente este arquivo Stock.php de substituição para uma correção mais completa
Comentários muito úteis
você pode verificar minha correção e fazer alterações no arquivo de estoque no plug-in:
https://github.com/hyyan/woo-poly-integration/pull/300/files
ainda não foi aceito, mas estou usando há um mês sem problemas.
Eu espero que eles aceitem meu pedido de puxar um dia ...