7

I want to custom sort by option in category Filter For price like this Price: Low to High & Price: High to Low.
Please suggest me how to change sorting option in my site. i am using magento 2.1.2

4

1 Answer 1

22

Step 1: Create plugins

app/code/Vendor/Module/etc/di.xml

<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Catalog\Block\Product\ProductList\Toolbar"> <plugin name="custom_custom_block_toolbar" type="Vendor\Module\Plugin\Catalog\Block\Toolbar" /> </type> <type name="Magento\Catalog\Model\Config"> <plugin name="custom_catalog_model_config" type="Vendor\Module\Plugin\Catalog\Model\Config" /> </type> </config> 

Step 2: Create Config.php

app/code/Vendor/Module/Plugin/Catalog/Model/Config.php

<?php namespace Vendor\Module\Plugin\Catalog\Model; class Config { public function afterGetAttributeUsedForSortByArray( \Magento\Catalog\Model\Config $catalogConfig, $options ) { $options['low_to_high'] = __('Price - Low To High'); $options['high_to_low'] = __('Price - High To Low'); return $options; } } 

Step 3: Create Toolbar.php

app/code/Vendor/Module/Plugin/Catalog/Block/Toolbar.php

<?php namespace Vendor\Module\Plugin\Catalog\Block; class Toolbar { /** * Plugin * * @param \Magento\Catalog\Block\Product\ProductList\Toolbar $subject * @param \Closure $proceed * @param \Magento\Framework\Data\Collection $collection * @return \Magento\Catalog\Block\Product\ProductList\Toolbar */ public function aroundSetCollection( \Magento\Catalog\Block\Product\ProductList\Toolbar $subject, \Closure $proceed, $collection ) { $currentOrder = $subject->getCurrentOrder(); $result = $proceed($collection); if ($currentOrder) { if ($currentOrder == 'high_to_low') { $subject->getCollection()->setOrder('price', 'desc'); } elseif ($currentOrder == 'low_to_high') { $subject->getCollection()->setOrder('price', 'asc'); } } return $result; } } 
13
  • Its not working. I tried to apply it in Magento 2.1.6 Commented Jun 9, 2017 at 5:34
  • No. Its not working in firefox as well. Your mention jquery function is not called. Commented Jun 9, 2017 at 6:08
  • 1
    Works like a charm Commented May 18, 2018 at 11:52
  • 2
    It doesn't work for me for products with special_price. Can you check if it is working with a mixed set of products, without special price and with special price? Commented Feb 8, 2019 at 6:26
  • 1
    Thanks bro :) working fine with 2.3.0 and tested Commented Aug 21, 2019 at 17:23

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.