I prodotti esauriti appaiono ancora nel frontend, nella ricerca e in altri - Magento 2.1.0


12

Vedo che la mia installazione di Magento 2.1.0 ha un problema! Rifiuta di nascondere prodotti esauriti dalle pagine di ricerca e categoria! Ho svuotato la cache, ho reindicizzato, ma senza fortuna!

Puoi darmi qualche consiglio?

I miei prodotti sono con stock 0, ma davanti appaiono in stock e quando li ordini ti dà questo errore:

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

Grazie

Modifica successiva:

Conosco anche queste informazioni:

Impostato in admin> Stores> configurazione> Catalogo> Inventario> Opzioni stock> Visualizza prodotti non disponibili su NO

Questa è in realtà una caratteristica di Magento. L'impostazione Visualizza prodotti non disponibili su Non solo li nasconde dalle pagine dell'elenco delle categorie e dalla pagina dei risultati della ricerca. La pagina del prodotto è in realtà ancora disponibile. A partire da CE 1.9.1 c'è anche un messaggio sotto l'impostazione di configurazione Visualizza prodotti esauriti che dicono che i prodotti saranno comunque mostrati dagli URL dei prodotti diretti .. E questa è in realtà una buona cosa. In questo modo i motori di ricerca non registrano molte 404 pagine quando i tuoi prodotti sono esauriti. Non vedo il danno nel lasciarlo così. Il cliente non può comunque ordinarli. Se desideri che un prodotto non sia affatto disponibile nel tuo negozio, devi contrassegnarlo come disabilitato o impostare la sua visibilità su Non visibile individualmente o rimuovere la sua associazione ai siti Web dalla scheda dei siti Web nella pagina di modifica del prodotto di amministrazione. Fonte:I prodotti esauriti appaiono ancora nel frontend


Sto affrontando anche lo stesso problema. Anche dopo aver modificato la configurazione del backend, devo ancora affrontarlo. Se hai trovato la soluzione, per favore fammi sapere.
sabarivenkatesankrish

Ragazzi continuate a riscontrare questo problema? Stai usando un tema personalizzato? Penso che probabilmente potrebbe essere la radice del problema.
Fred Orosko Dias,

Risposte:


7

Vai su admin> Negozi> configurazione> Catalogo> Inventario> Opzioni magazzino

Impostare Visualizza prodotti non disponibili su NO

inserisci qui la descrizione dell'immagine


3
Già fatto! Ancora nessun cambiamento!
edgetwism,

2

Stavo affrontando lo stesso identico problema (Magento v2.1.9) a causa di "Backorder", che era impostato "Consenti quantità inferiore a 0 e notifica al cliente"

Vai su admin> Negozi> configurazione> Catalogo> Inventario> Opzioni stock Imposta Visualizza "Prodotti non disponibili" su NO


Vai su admin> Negozi> configurazione> Catalogo> Inventario> Opzioni stock prodotto Imposta gli arretrati su "Nessun arretrato"

Nota: la modifica può richiedere del tempo a causa dell'elaborazione dell'intero catalogo.

inserisci qui la descrizione dell'immagine


0

Ho lo stesso problema su 2.2.3. Da parte mia, è successo dopo il comando di aggiornamento. Ho provato i comandi ed ho eseguito query ma senza fortuna. Ho risolto il problema usando la seguente opzione da Sì a No. Stores => Configuration => Catalog=> Catalog =>Disable Add to cart button for Guests From Yes to NoSpero che questo aiuti qualcuno .Grazie inserisci qui la descrizione dell'immagine


Di default non esiste tale opzione.
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;
    }

}

-3

Ho trovato la soluzione!

Inserisci un filtro nel catalogo: Quantità: 0.0000 - 0.0000!

Quindi seleziona tutto, azione> aggiorna attributi> inventario avanzato> Disponibilità magazzino (fai clic su modifica)> Seleziona esaurito> salva quindi reindicizza e i prodotti sono spariti :)


E per prodotti configurabili?
Franck Garnier,

-3

fornitore dello spazio dei nomi \ module \ Helper;

class 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;
}

}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.