This is actually a feature of Magento.
Setting Display out of stock products to No only hides them from the category list pages and the search results page.
The product page is actually still available.
Starting with CE 1.9.1 there is even a message under the config setting Display out of stock products saying Products will still be shown by direct product ...
Solution 1 This moves out of stock products to the end of the list on page, not all over the pagination:
1.Add event observer:
isSaleable() is just an alias of isSalable() :
* Alias for isSalable()
* @return bool
public function isSaleable()
The isSalable() method looks complex but it simply checks for the availability of the product via the isAvailable() method:
* Check is product available for sale
* @return bool
In our case the issue was related to a migration from Magento 1 to Magento 2 via migration data tool. The problem is that default value for the attribute 'links_exist' is 0 in Magento 1. However in Magento 2 default value for 'links_exist' is null.
Because of that following validation fails
You can easily do this by visiting your Advanced Inventory Tab of your product.
Just set Manage Stock option to No
If your store contain all digital products then you can set below option by default, so you don't need to set for individual product
Stores > Configuration > Catalog > Inventory > Product Stock Options
Manage Stock to No
To show out of stock products go to System > Configuration > Catalog > Inventory and set Display Out of Stock Products to yes.
Now we'll need to rewrite the class Mage_Catalog_Block_Product_View_Type_Configurable which you can do in your own module. Specifically the method getJsonConfig.
This one adds to Sohel Rana's answer. Tested on 2.3.3 for configurable products
For any of the product out of stock:
In your di.xml
<preference for="Magento\ConfigurableProduct\Pricing\Render\FinalPriceBox" type="<Vendor>\<Module>\Pricing\Render\FinalPriceBox" />
And in \\Pricing\Render\FinalPriceBox.php
You need to create your custom module using below code
Let say module name Custom_Outofstock
So create folder in app/code
Create registration.php file at app/code/Custom/Outofstock/registration.php
Add below code to it:
You can use this code which give stock in faster way using product id
Out is an array
[item_id] => 1868
[product_id] => ...
These all are methods which checked the product availability with different parameters .
isInStock() - Its just check the product is in stock or not. And for this its check the product attribute value of Stock Status, if it is set as In Stock then it will return true.
isAvailable() - Its check the product availability according to product status, stock ...
The "Display Out of Stock Products" option set to No will hide products that are completely out of stock. If you want these to be displayed, but also want filters to hide options where the simple product for that option is out of stock, there is a simple solution.
Rather than fiddle about with how the product collection is retrieved and/or displayed, it is ...
After doing R&D found a solution to get all the out of stock products
By default in product collection join the cataloginventory_stock_status table so "stock_status_index.stock_status = 1" added into the query.
To get the only out of stock products, first we need to remove cataloginventory_stock_status join and than filter again.
$productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\...
Not sure if this is applicable, but I'm on Magento 2.1.9 and there is an
issue with configurable products showing price of $0.00 when child products are out of stock on Github.
The hack, Albeit a core hack, is the only available remedy it seems.
I added the code & commented below, into
By default magento filters only in stock products in collection. We have to set the in stock filter as false.
$productCollection = $_objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
$collection = $productCollection->create()->setFlag('has_stock_status_filter', false)->load();
To do above things, you need to do this things.
<plugin name="Vendor_Extension_Stock_Helper" type="Vendor\Extension\Plugin\Helper\Stock" sortOrder="10" disabled="false" />
Create the Helper File with arround plugin.
$firstProductId = Mage::getSingleton('catalog/product')->getIdBySku('mysku');
$inStock = Mage::getModel('cataloginventory/stock_item')->getCollection()->addFieldToFilter('product_id', $firstProductId)->getFirstItem()
This should do the trick.
Although, not sure how efficient it would be but can confirm this is magento way.
let's say that $collection is your product collection that you build like this:
$collection = Mage::getModel('catalog/product')->getCollection()
->...additional filters here...;
now do this to your collection.
This joins the collection with the stock status table.
$website = Mage::app()->getWebsite();
Yes it does.
Check this out.
Magento has in-built setting for turning on "Backordering". It is located at
System >> Configuration >> Catalog >> Inventory but this will work only on new products.
For all existing products you still have to turn it on in admin products grid(Catalog >> Manage Products) by selecting products and then ...
You need to modify some logic for that. So create a new module and add following code.
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
I just created a small module to show the price of out-of-stock items based on @Cotton 's answer.
Feel free to fork:
Composer install should work if you add the repo to your dependencies. Be aware, that I set the required PHP version to ^7.1 - you may need to reconfigure that in the composer.json ...
The above one is a known issue for Magento and can be solved partially by installing the below extension.
Reference for the Issue can be found at Magento Issue 10454
I was facing the same issue in one of my projects recently. In my case the client wanted to display stock availability label (i.e. Instock/Outofstock) on category pages as well. That is not available in default magento.
When saleable qty becomes 0 and quantity is 1 in that case PDP page was showing outofstock where the category page was still showing in ...
Sorry if solution isn't very clean. I just copied from one of the modules which has been written many years ago...