Los productos agotados todavía aparecen en la interfaz, la búsqueda y otros - Magento 2.1.0

12

¡Veo que mi instalación de magento 2.1.0 tiene un problema! ¡Se niega a esconder productos agotados de las páginas de búsqueda y categoría! Limpié el caché, reindexé, ¡pero no tuve suerte!

¿Me puede dar algún consejo?

Mis productos están en stock 0, pero al frente aparecen en stock, y cuando los pides te da este error:

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

Gracias

Edición posterior:

También conozco esta información:

Establecer en admin> Tiendas> configuración> Catálogo> Inventario> Opciones de inventario> Mostrar productos agotados a NO

Esta es en realidad una característica de Magento. Establecer Mostrar productos agotados en No solo los oculta de las páginas de la lista de categorías y de la página de resultados de búsqueda. La página del producto todavía está disponible. A partir de CE 1.9.1, incluso hay un mensaje debajo de la configuración de configuración Mostrar productos agotados que dice que los productos aún se mostrarán mediante URL de producto directo. Y esto es realmente algo bueno. De esta forma, los motores de búsqueda no registran muchas páginas 404 cuando sus productos se agotan. No veo el daño en dejarlo así. El cliente no puede ordenarlos de todos modos. Si desea que un producto no esté disponible en su tienda, debe marcarlo como deshabilitado o configurar su visibilidad como No visible individualmente o eliminar su asociación a los sitios web desde la pestaña de sitios web en la página de edición del producto de administración. Fuente:Los productos agotados todavía aparecen en la interfaz

edgetwism
fuente
También estoy enfrentando el mismo problema. Incluso después de cambiar la configuración del backend, todavía estoy enfrentando esto. Si encontró la solución, hágamelo saber.
sabarivenkatesankrish
¿Todavía están experimentando este problema? ¿Estás usando un tema personalizado? Creo que probablemente podría ser la raíz del problema.
Fred Orosko Dias

Respuestas:

7

Vaya a admin> Tiendas> configuración> Catálogo> Inventario> Opciones de inventario

Configure Mostrar productos agotados en NO

ingrese la descripción de la imagen aquí

Prashant Valanda
fuente
3
Ya hecho eso! Todavía no hay cambio!
edgetwism
2

Estaba enfrentando exactamente el mismo problema (Magento v2.1.9) debido a "Pedidos pendientes", que se estableció "Permitir cantidad por debajo de 0 y Notificar al cliente"

Vaya a admin> Tiendas> configuración> Catálogo> Inventario> Opciones de acciones Establezca Mostrar "Productos agotados" en NO


Vaya a admin> Tiendas> configuración> Catálogo> Inventario> Opciones de existencias de productos Configure los pedidos pendientes en "Sin pedidos pendientes"

Nota: El cambio puede llevar algún tiempo debido al procesamiento de todo el catálogo.

ingrese la descripción de la imagen aquí

Nadeem0035
fuente
0

Tengo el mismo problema en 2.2.3. Por mi parte, sucedió después del comando de actualización. Probé comandos y ejecuté consultas pero no tuve suerte. Lo solucioné cambiando la siguiente opción de Sí a No. Stores => Configuration => Catalog=> Catalog =>Disable Add to cart button for Guests From Yes to NoEspero que esto ayude a alguien .Gracias ingrese la descripción de la imagen aquí

Mahmood Rehman
fuente
Por defecto no existe tal opción.
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
fuente
-3

¡Encontré la solución!

Poner un filtro en el catálogo: Cantidad: 0.0000 - 0.0000!

Luego seleccione todo, acción> actualizar atributos> inventario avanzado> Disponibilidad de stock (haga clic en cambiar)> Seleccione agotado> guardar, reindexar y los productos desaparecerán :)

edgetwism
fuente
¿Y para productos configurables?
Franck Garnier
-3

proveedor de espacio de nombres \ module \ Helper;

Los datos de clase se extienden \ 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
fuente