Os produtos esgotados ainda aparecem no frontend, pesquisa e outros - Magento 2.1.0

12

Vejo que minha instalação do magento 2.1.0 tem um problema! Recusa-se a ocultar produtos fora de estoque das páginas de pesquisa e categoria! Limpei o cache, reindexei, mas sem sorte!

Você pode me dar algum conselho?

Meus produtos estão com estoque 0, mas na frente eles aparecem em estoque e, quando você os solicita, gera esse erro:

We don't have as many "Item's name" as you requested.

obrigado

Edição posterior:

Eu também conheço esta informação:

Defina em admin> Lojas> configuração> Catálogo> Inventário> Opções de estoque> Exibir produtos esgotados como NÃO

Este é realmente um recurso do Magento. Definir Exibir produtos fora de estoque como Não apenas os oculta nas páginas da lista de categorias e na página de resultados da pesquisa. A página do produto ainda está disponível. A partir do CE 1.9.1, há até uma mensagem na configuração Exibir produtos em falta, indicando que os produtos ainda serão exibidos por URLs diretos do produto. E isso é realmente uma coisa boa. Dessa forma, os mecanismos de pesquisa não registram muitas 404 páginas quando seus produtos ficam sem estoque. Não vejo mal em deixar assim. O cliente não pode solicitá-los de qualquer maneira. Se você deseja que um produto não esteja disponível em sua loja, marque-o como desativado ou defina sua visibilidade como Não visível individualmente ou remova sua associação aos sites da guia Sites na página de edição do produto do administrador. Fonte:Os produtos esgotados ainda aparecem no frontend

edgetwism
fonte
Eu também estou enfrentando o mesmo problema. Mesmo depois de alterar a configuração de back-end, ainda estou enfrentando isso. Se você encontrou a solução, entre em contato.
precisa saber é o seguinte
Vocês ainda estão enfrentando esse problema? Você está usando um tema personalizado? Eu acho que provavelmente poderia ser a raiz do problema.
Fred Orosko Dias 11/01

Respostas:

7

Vá para admin> Lojas> configuração> Catálogo> Inventário> Opções de Estoque

Defina Exibir produtos esgotados como NÃO

insira a descrição da imagem aqui

Prashant Valanda
fonte
3
Já fiz isso! Ainda não há mudança!
Edgetwism
2

Eu estava enfrentando exatamente o mesmo problema (Magento v2.1.9) devido a "Pedidos pendentes", que foram definidos como "Permitir quantidade abaixo de 0 e notificar o cliente"

Vá para admin> Lojas> configuração> Catálogo> Inventário> Opções de estoque Definir exibição "Produtos esgotados" para NÃO


Vá para admin> Lojas> configuração> Catálogo> Inventário> Opções de estoque do produto Defina pedidos pendentes como "Sem pedidos pendentes"

Nota: A alteração pode levar algum tempo devido ao processamento de todo o catálogo.

insira a descrição da imagem aqui

Nadeem0035
fonte
0

Se a resposta ajudou de alguma forma, por favor, marque como resposta, caso a sua dúvida não tenha sido solucionada, por Stores => Configuration => Catalog=> Catalog =>Disable Add to cart button for Guests From Yes to Nofavor, poste novamente . .Obrigado insira a descrição da imagem aqui

Mahmood Rehman
fonte
Por padrão, não existe essa opção.
Priyank
-1
namespace vendor\module\Block\Product;

class ListProduct extends \Magento\Catalog\Block\Product\ListProduct{

    protected function _getProductCollection(){
        $collection = parent::_getProductCollection();
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $productIds = $objectManager->create('\vendor\module\Helper\Data')->getIdsToLastStock($collection->getAllIds());
        $orderString = array('CASE e.entity_id');
        foreach($productIds as $i => $productId) {
            $orderString[] = 'WHEN '.$productId.' THEN '.$i;
        }
        $orderString[] = 'END';
        $orderString = implode(' ', $orderString);
        $collection->addAttributeToFilter('entity_id', array('in' => $productIds));
        $collection->getSelect()->order(new \Zend_Db_Expr($orderString));
        return $collection;
    }

}
starjet
fonte
-3

Encontrei a solução!

Coloque um filtro no catálogo: Quantidade: 0.0000 - 0.0000!

Em seguida, selecione tudo, ação> atualizar atributos> inventário avançado> Disponibilidade de estoque (clique em alterar)> Selecionar esgotado> salvar e reindexar e os produtos desaparecerão :)

edgetwism
fonte
E para produtos configuráveis?
Franck Garnier
-3

namespace vendor \ module \ Helper;

classe Data estende \ Magento \ Framework \ App \ Helper \ AbstractHelper {

protected $_stockItemRepository;
protected $_scopeConfig;
protected $_storeScope;

public function __construct(\Magento\CatalogInventory\Model\Stock\StockItemRepository $_stockItemRepository, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig)
{
    $this->_stockItemRepository = $_stockItemRepository;
    $this->_scopeConfig = $scopeConfig;
    $this->_storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORE;
}


public function getIdsToLastStock($ids){
    if($this->_scopeConfig->getValue('module/vendor_module/active',$this->_storeScope)==1) {
        $products = array();
        $productIds = array();
        foreach ($ids as $id) {
            try {
                $stockItem = $this->_stockItemRepository->get($id);
                $products[] = array('id' => $id, 'stock' => $this->checkIfAvailableInStock($stockItem));
            } catch (\Exception $ex) {
                $products[] = array('id' => $id, 'stock' => 0);
            }
        }

        if (count($products) > 0) {
            foreach ($products as $id => $value) {
                $names[$id] = $value['stock'];
            }
            $keys = array_keys($products);
            array_multisort(
                $names, SORT_ASC, SORT_NUMERIC, $products, $keys
            );
            $result = array_combine($keys, $products);
            foreach ($result as $product) {
                $productIds[] = intval($product['id']);
            }
            return $productIds;
        } else {
            return $ids;
        }
    }
    return $ids;
}


private function checkIfAvailableInStock($item){
    if($item->getIsInStock()){
        if($item->getQty()>0)
            return 0;
    }
    return 1;
}

}

starjet
fonte