Magento Open Source 2.2.4 Release Notes
Patch code and release notes published on May 2, 2018. Release notes revised on July 1, 2018.
We are pleased to present Magento Open Source 2.2.4. This release includes new tools and numerous functional fixes and enhancements, plus a substantial number of contributions from the wider Magento community.
Highlights
Look for the following highlights in this release:
-
Significant new bundled extensions that add instant and accurate tax and shipping calculations right from the cart:
-
Amazon Pay provides a trusted, familiar way for customers to check in and check out. See Amazon pay for a full description of the advantages this solution offers merchants and their customers.
-
Vertex simplifies and automates the complexity of calculating sales tax. Check out the Magento User guide discussion of Vertex, too.
-
Klarna Payments is a new payment method. With Klarna Payments, merchants can provide customers with the option to pay now, pay later, or pay by installment for their purchases. See Magento User Guide for information on using Klarna with Magento. For more information on Klarna products, see Klarna Payments.
-
-
Numerous fixes and enhancements to the Magento Shipping and dotmailer bundled extensions. Merchants can now use dotmailer to create their own transactional email templates. Magento Shipping capabilities have been expanded, too.
-
Fixes and enhancements to core features, including performance improvements that enable faster shopping with image loading and search performance enhancements.
-
Almost 200 community contributions. These community contributions include performance-tuning enhancements plus at least 80 engineering fixes.
Looking for more information on these new features as well as many others? Check out Magento 2.2.x Developer Documentation and the Magento Open Source User Guide.
Enhancements
This section describes changes in this release that are not full-fledged features or bug fixes, but that add noticeable improvements to product performance or ease-of-use.
- The admin global search is now translatable, extensible, and takes into account the ACL settings for the current user. See Using global search for more information. Fix submitted by Roman K. in pull request 1167. GitHub-7698
- Magento has an automated checker to enforce the short array syntax convention that we are now enforcing in new code. This standard complies with all requirements of PSR-2. Fix submitted by Nickolas Malyovanets in pull request 12499.
- Magento now provides dedicated payment and shipping debug log files to store information specific to those functional areas.
- The Emogrifier dependency has been upgraded to 2.0.0 or later. Fix submitted by Oliver Klee in pull request 13132.
- We’ve replaced
is_null
with strict comparison only for models and block in the following modules:Catalog
,Tax
,Sales
, andEAV
. Fixes submitted by Alexander Shkurko in pull requests 13171, 13170, 1163.
dotmailer enhancements
The dotmailer bundled extension features the following enhancements for this release:
-
New Abandoned Cart report table
-
Ability for merchants to design their own transactional email template
-
Enhancement of syncs of subscriber’s sales data. Sales data is now synced only if the sales data option is enabled in config.
-
Ability to set transactional email at the Store level
-
Enhanced validation for deletion of cron job CSV files
Known issue
Note: The following known issue has been resolved in Magento Commerce and Open Source 2.2.5. We recommend that all users of 2.2.4 upgrade to 2.2.5 at their earliest convenience. If you are unable to upgrade to 2.2.5, Patch MAGETWO-92926 provides a fix for this issue.
Customers have reported the following behavior after upgrading to Magento 2.2.4 in deployments that span multiple websites:
Magento multi-store installations do not use the store view-specific values from the store configuration settings if these settings have different values than the global default configuration settings. Instead, Magento uses the default configuration for all store views. GitHub-15205, GitHub-15245
We do not recommend upgrading to Magento 2.2.4 if you deploy across multiple websites. Note that this problem is not triggered if you have only a single website with multiple stores or store views.
Fixes
Installation, setup, and deployment
- The
backup
command now works as expected. Fix submitted by Jagriti Joshi in pull request 13066. GitHub-12877
- Links to Magento installation documentation in
setup/view/magento/readiness-check/progress.html
are now correct. Fix submitted by Jonas Hünig in pull request 12857.
- You can now use the
app:config:status
command to check whether configuration propagation is up-to-date. Fix submitted by Juan Alonso in pull request 12441.
- The
bin/magento setup:rollback -d filename.sql
command now works as expected. Previously, this database rollback operation failed on certain versions of Magento (for example, 2.1.9). Fix submitted by Roman K. in pull request 12108. GitHub-12064
- You can now set API access to integrations for Admin roles, which gives privileged users the ability to grant limited access to users such as third-party integrators. GitHub-9684
- You can now enable or disable the Magento Profiler from the command line. GitHub-9277
- The icons for Extension Manager and Module Manager are now consistent with the main content area and left-hand menu of the Web Setup Wizard. Fix submitted by Danny Verkade in pull request 11388. GitHub-11236
-
Magento now continues operating in maintenance mode if it was previously enabled. Previously, Magento disabled maintenance mode when you used one of these commands:
bin\magento module:uninstall
bin\magento setup:backup
bin\magento setup:rollback
bin\magento theme:uninstall
bin\magento deploy:mode:set production
Fix submitted by Joke Puts in pull request 11052. GitHub-9918
- You can specify a custom version for static files being deployed, and now nginx sample config files can match these custom versions, too. Fix submitted by Scott Buchanan in pull request 12521.
- The
CrontabManager.php
file has been updated as follows: Ifcrontab
has already been populated, thephp bin/magento cron:install
command adds#~ MAGENTO START
and the rest of code directly to the last row of crontab without any spaces. Fix submitted by Michele Fantetti in pull request.
- The
ext-bcmath
PHP extension is now required in Open Source. Previously, it was required for Commerce only. Fix submitted by Mobecls in pull request 12768.
- The
cache_lifetime
default setting for theMagento\Theme\Block\Html\Footer
block is no longer set to false, and the new default setting is 3600. Fix submitted by zolat in pull request 13762.
- The
magento maintenance:allow-ips
command now has the--add
flag, which appends a new IP address to the list of allowed IP addresses. Previously, when you added a new IP address, you had to copy the existing addresses. Fix submitted by Barry vd. Heuvel in pull request 13586.
- The
config:set
command now has alock-config
option, and configuration values are always stored inapp/etc/config.php
instead ofapp/etc/env.php
. Fix submitted by Andreas von Studnitz in pull request 13280.
- In the
Backend/etc/adminhtml/system.xml
file, theurl
group andredirect_to_base
field are now configured so that theshowInWebsite
andshowInStore
attributes are set to1
. Fix submitted by JeroenVanLeusden in pull request 13614.
- You can now deploy static content on demand while in production mode.
- The output of the
magento maintenance:status
command no longer inserts a comma in between IP addresses, making it easier to copy and paste the values. Fix submitted by Barry vd. Heuvel in pull request 13587.
- The
DeploymentConfig
reader now always returns an array. Fix submitted by Barry vd. Heuvel in pull request 13584.
- Magento has improved how it manages the size of the
cron_schedule
table. GitHub-11002
- Magento now includes a helper object to facilitate access to styling objects in the Symfony console. Fix submitted by Wesley Guthrie in pull request 11504.
- Magento no longer throws an error when you try to generate an URN catalog for an empty
misc.xml
file. Fix submitted by Timon de Groot in pull request 11686. GitHub-5188
- The
sampledata:deploy
andremove
commands now haveno-update
options. Fix submitted by Fabian Schmengler in pull request 12359.
- The currencies dropdown menu that is available during the setup process (step 4 – customize your store) no longer displays unallowed currencies. Fix submitted by Ricardo Martins in pull request 13770.
- A database backup created by
setup:backup --db
and restored withsetup:rollback -d
now includes triggers as expected. Previously, the restored database did not include triggers, which meant that indexes could not work correctly. Fix submitted by Denis Ristic in pull request 11369. GitHub-9036
Bundle products
- Save operations now work as expected for bundle products. Fix submitted by dzianis-yurevich in pull request 12734. GitHub-6916
- You can now duplicate a bundle product without stripping the original bundle product of its options. Fix submitted by MattUnity in pull request 1217.
Catalog
- Magento now successfully updates a product’s
stock_item
extension_attribute
parameter for a product previously created using REST. Fix submitted by nuzil in pull request 13494.
- When two customers check out concurrently for the same product, one of the checkouts now succeeds. Previously, when two customers checked out concurrently for the same product, and the total quantity being ordered is greater than the quantity available, the stock could become negative. Fix submitted by Myroslav Dobra in pull request 2133.
- The
getUrl
method inMagento\Catalog\Model\Product\Attribu…
no longer returns image URLs with unexpected double slashes. Fix submitted by Igor Tregub in pull request 13498.
- When sorting by price, Magento now displays the same number of products no matter how it sorts products in the Catalog Product list. Previously, Magento reduced the product count by the number of disabled products when sorting by price.
- The category filter used for layered navigation for configurable products with no available options now counts products accurately.
- When you set the
category_ids
attribute to be visible in the storefront catalog, Magento now displays catalog listings as expected. Previously, Magento threw an exception. Fix submitted by Manu Gonzalez Rodriguez in pull request 11389. GitHub-11341
- Product display issues within categories that have been filtered by price have been resolved: Products are no longer repeated within a category, and random products are no longer included. Fix submitted by Mayank Zalavadia in pull request 11429. GitHub-11139
- Updating a product with the REST API (
PUT /rest/all/V1/products/example_sku
) no longer assigns the product to all websites automatically. (Automatic assignment to all websites now occurs only when you create the product in All Store Views scope.) Fix submitted by adrian-martinez-interactiv4 in pull request 11444. GitHub-11324
- Magento no longer throws an error when you re-save a product attribute with a new name. Fix submitted by Raul Mateos in pull request 11617. GitHub-6770
- You can now successfully remove a toolbar from a product listing page. Previously, you could explicitly remove the toolbar from layout configuration, but Magento would return
product_list_toolbar
to the layout. Fix submitted by mariuscris in pull request 11473. GitHub-9413
- The
getAttributeText($attributeCode)
method now returns string values as expected. Previously, this method returned an array of attribute values. Fix submitted by p-bystritsky in pull request 12003.
- You can now add customizable options to a product. Previously, when you tried to add a custom option to product, Magento threw this error:
A 'Uncaught TypeError: Cannot read property 'apply' of undefined' error
. Fix submitted by Roman K. in pull request 11965. GitHub-11792
- Magento now correctly decodes single quotation marks in the Admin attribute option input fields. Fix submitted by erfanimani in pull request 12133. GitHub-12127
- You can now save emojis in custom product options. Fix submitted by Carlos Lizaga in pull request 12253.
- The
delay
parameter now works as expected, which permits you to set the delay on the JQuery widget opening or closing. Previously, this parameter was documented, but did not work as expected. Fix submitted by Sam Carr in pull request 12161.
- Third-party category images now have
size
andtype
properties. Fix submitted by Vova Yatsyuk in pull request 12161.
- Category page X-Magento-Tags headers no longer contain product cache identities when category display mode is set to Static block only. Fix submitted by Atish Goswami in pull request 12466.
- You can now delete rows in the
dynamicRows
component. Fix submitted by Roman K. in pull request 921. GitHub-8830
- You can now add a new product with custom attributes that has the same name and attributes as a previously deleted product. Previously, Magento did not let you add this new product because a
request_path
with the same value already existed intable url_rewrite
from the previous product. Fix submitted by Nickolas Malyovanets in pull request 12167. GitHub-12110
- The
og:type
meta tag content value has been corrected from<meta property="og:type" content="og:product" />
to<meta property="og:type" content="product" />
. Fix submitted by Atish Goswami in pull request 12530.
- The Product Image Watermark Size Validation message has been revised for accuracy. Fix submitted by Nickolas Malyovanets in pull request 985. GitHub-12613
- Magento no longer creates an extraneous new product when you save an existing product whose SKU you’ve changed. Fix submitted by Nickolas Malyovanets in pull request 984. GitHub-12535
- cURL requests to delete a product’s tier pricing when used on store code all now works as expected. Previously, this cURL request deleted the tier pricing but also all the image selections for the product. Fix submitted by Nickolas Malyovanets in pull request 977. GitHub-10797
- Sort by Price now works as expected on the catalog search page. Fix submitted by Roman K. in pull request 929. GitHub-12468
- If an error occurs when you run
catalog:images:resize
, Magento now includes an entry into the log file. Previously, Magento displayed an error message, but did not add an entry into any log files. Fix submitted by Roman K. in pull request 1000. GitHub-8204
- You can now duplicate and save a product successfully. Previously, you could not successfully duplicate a product, and Magento displayed this message:
Notice: Undefined offset: 0 in /home/software/public_html/vendor/magento/module-catalog/Model/Category/Link/SaveHandler.php on line 124
. Fix submitted by p-bystritsky in pull request 983. GitHub-12259
- The REST API now saves all product properties as expected. Previously, Magento did not save the price and weight, and these attributes were not returned in the result of the POST request. Fix submitted by Nickolas Malyovanets in pull request 1018. GitHub-6486
- Duplicate
email
IDs no longer occur on the Magento default contact page when running Google Chrome { Version 63.0.3239.84 (Official Build) (64-bit) }. Fix submitted by serhii-balko in pull request 1036. GitHub-12712
- The
hasDataChanges
attribute for loaded EAV collection items now returnstrue
orfalse
as expected. Previously, this attribute always returnedtrue
. Fix submitted by virtual97 in pull request 12736. GitHub-12374
ajax:addToCart
now contains theeventData
parameter, with variables for SKU and quantity. Fix submitted by Renon Stewart in pull request 12875.
- You can now successfully save a new option for a product custom attribute when the value of Admin scope is empty. Previously, Magento threw an exception. Fix submitted by virtual97 in pull request 12755.
- You can now sort product collections by the
is_saleable
attribute. Fix submitted by Nickolas Malyovanets in pull request 1045. GitHub-7768
- We’ve added a failsafe to the
items.phtml
file. Fix submitted by Sam Granger in pull request 13086.
- You can now save a product with customizable options. Previously, if you were trying to add a customizable option (for example, a customer group) to a product, Magento did not let you save the product, the form did not close, and a validation issue was triggered. Fix submitted by luismiguelyangehuaman in pull request 12048. GitHub-11528
- Magento now correctly displays stock status for products. Fix submitted by Roman K. in pull request 955.
- The catalog product list widget now works with multiple SKUs. Previously, Magento displayed this error,
We're sorry, an error has occurred while generating this email
. Fix submitted by Nickolas Malyovanets in pull request 1050. GitHub-11897
- Magento now loads type-dependent layout handles before more specific ID/SKU layout handles. Previously, when Magento updated a product page layout for a specific ID with
catalog_product_view_id_<product_ID>.xml
, some changes were overwritten by a less specificcatalog_product_view_type_<product_type>.xml
. Fix submitted by Andreas Schrammel in pull request 12807.
- Unused temporary variables have been removed from
Adminhtml/Category/Save.html
. Fix submitted by Pierre Martin in pull request 13663.
- Language switching now works as expected on the Catalog and Product pages. Previously, language switching did not work on these pages in production mode. Fix submitted by p-bystritsky in pull request 1143. GitHub-11963
- The subcategory URL path is now updated for a store view according to the URL path of its parent category.
- In cases where
imagebuilder
makes multiple calls, it no longer re-uses attributes from the first call if attributes from a second call are empty. Previously,imagebuilder
re-used the attributes from the first call, which lead to unexpected results in storefront image display. Fix submitted by Ihor Sviziev in pull request 13438.
updateCart.phtml
now uses dynamic rather than hardcoded validators. Fix submitted by Gil Greenberg in pull request 13462.
- An unused constructor dependency has been removed from the Product Link Save handler. Fix submitted by Ihor Sviziev in pull request 13436.
- The Low Stock report now accurately lists all out-of-stock products. Previously, this report was not accurate when the All Websites view was selected. Fix submitted by gwharton in pull request 13682. GitHub-10595
- We’ve improved the visibility of products when displayed by category, and you can now filter by status. Fix submitted by Peter Jaap Blaakmeer in pull request 12564.
- Magento now correctly sets a
product_links
position attribute even when the attribute value is not set in a GET request. Previously, only the first two of each link type were shown in the backend or in a GET request response, even though Magento correctly added the product links to the database. Fix submitted by Mohammad Haj-Salem in pull request 12650.
Cart and checkout
- Magento no longer adds addresses with
saveInAddressBook
set to 0 to the address book for new customers. Previously, if you placed an order as a guest and set thesave_in_address_book
setting for an address to 0, Magento still copied that address to the customer address book when registering as a new customer on the checkout success page. GitHub-7691
- Magento no longer combines the Custom Checkout and Shipping steps when Magento loads the checkout page. Fix submitted by Roman K. in pull request 975.
- You can now successfully change currency for an order before you complete the order. Previously, if you changed currency, when you proceeded with checkout by choosing as Bank Transfer Payment as Payment Method, Magento displayed, Your credit card will be charged for. Fix submitted by Roman K. in pull request 993. GitHub-12526
- Magento no longer throws a JavaScript error on the cart from postcode validation when United States is deselected in the Allowed Countries Admin option (Admin > Stores > Settings > Configuration > General > Default Country). Fix submitted by codekipple in pull request 13051.
- Street format spacing when multiple streets are present is now consistent across Shipping and Review & Payments checkout steps. Fix submitted by nfourteen in pull request 13082.
- Magento now displays text on the New Cart Rules page correctly. Previously, labels listed in the Store View Specific Labels section of this page were sometimes truncated or duplicated. Fix submitted by serhii-balko in pull request 1146. GitHub-12231
- When you check out as guest and click Create an account on the success page, you can now click on the customer name to jump to the customer record. Fix submitted by Renon Stewart in pull request 12998.
- The
XML_PATH_CUSTOMER_MUST_BE_LOGGED
constant has been deprecated. Fix submitted by Roman K. in pull request 1148. GitHub-7848
dropdownDialog
is now required when the minicart is available. Fix submitted by Alexander Menk in pull request 13830.
- The Check Out with Multiple Addresses page now displays an empty state field as expected when a customer changes from one address to another. Fix submitted by enriquei4 in pull request 13364. GitHub-8621
Configurable products
- You can now use custom price symbols when assigning prices to configurable prices. Previously, Magento did not properly display prices for configurable products when you used a custom price symbol when assigning prices. Fix submitted by pradeep-wagento in pull request 13025. GitHub-12430
- Magento now reorders configurable attribute options as expected on the product page. Fix submitted by wardcapp in pull request 12963. GitHub-7441
- Magento now displays elements of the Catalog > Products > Create Configurations page correctly. Previously, the currency symbol overlapped with the attribute option’s price during creation of a configurable product. Fix submitted by Vasilina in pull request.
- If you enter an invalid value for an SKU during the creation of the configurable product, Magento now displays a warning and does not let you save the product. Previously, you were not warned about invalid SKU values, and when you clicked Save, all the product information you entered was lost. Fix submitted by Zamaroka in pull request 12737. GitHub-11953
- Magento now correctly runs a partial attribute (EAV) reindex of configurable products whose child products’ visibility is set to Not Visible Individually. Fix submitted by Roman K. in pull request 1023. GitHub-12667
- Magento now displays the ID and
Visibility
parameter of child products when you use theLinkManagementInterface
service contract to retrieve the ID and visibility of these products. Previously, Magento displayed NULL. Fix submitted by Nickolas Malyovanets in pull request 986.
- The product price indexer (
catalog_product_price reindex
) no longer stalls during reindexing.
- Product records inside the
catalog_product_super_link
table are no longer updated needlessly when you save a configurable product. Previously, saving configurable product erased and then reinserted records in thecatalog_product_super_link
table even when child products were not changed. This practice quickly resulted in an unnecessarily largecatalog_product_super_link
table, especially in multi-website installations.
Customer accounts
- Magento now trims trailing and leading spaces when saving the name of a new contact. Fix submitted by wardcapp in pull request 12964. GitHub-10415
- We fixed the invalid parameter configuration that was provided for the
$block
argument ofMagento\\Ui\\Component\\HtmlContent
. Fix submitted by Tomasz Gregorczyk in pull request 12964.
- Magento now successfully sends email (with content) even when you make a mistake in the email template file name. Previously, when the template name was incorrect, Magento sent the email with no content. Fix submitted by Roman K. in pull request 970. GitHub-8437
- You can now import customer addresses from websites with country restrictions.
- Magento no longer displays the
Too many password reset requests
error when the max wait time between password resets setting has been disabled. Previously, when you attempted to reset a customer’s password through the Admin, Magento threw an error even when you disabled themax wait time between password resets
setting in the store configuration settings. Fix submitted by Cole Hafner in pull request. GitHub-11409
- Magento no longer throws an exception when you try to open your account address book immediately after creating a customer. Fix submitted by Chris Pook in pull request 12220. GitHub-12180
- The
isConfirmationRequired
method in theAccountManagement
class is now public, which makes it available for plugins. (For example, you can now develop custom business logic to decide if confirmation is required (yes/no) for certain customers.) Fix submitted by Derrick Heesbeen in pull request 11878.
- When configuring a customer account, you can now leave the prefix or suffix fields as optional. Previously, if you did not select an option for these fields, Magento defaulted to selecting the first option in the list. Fix submitted by Andreas von Studnitz in pull request 11462. GitHub-7241
- The storefront Back to Sign in button now works as expected. Previously, when you clicked that button, Magento simply reloaded the current page. Fix submitted by StasKozar in pull request 12759. GitHub-12715
- The
window.checkout.customerLoginUrl
now contains a URL that includes the referrer in base64 encoding (for example, https://myshop.com/customer/account/login/referrer/aHR0cHM6Ly9teXNob3AuY29tL2NoZWNrb3V0). Previously, the login URL did not include a referrer (for example, https://myshop.com/customer/account/login). Fix submitted by Tommy Quissens in pull request 12630. GitHub-12627
- When you are on the cart page and click a product’s Edit link, the product page now correctly displays the product quantity currently in the cart. Fix submitted by Arnoud Beekman in pull request 13310.
- You can now create a custom attribute of type file for Customer objects as expected. Previously, you could create the custom attribute, but the file would not upload. Fix submitted by Mkennethsmith in pull request 13563. GitHub-11252
- The event
customer_address_after_save_viv_observer
is now spelled correctly in the Customerevents.xml
file.. Fix submitted by Renon Stewart in pull request 13661.
- The
is_subscribed
extended parameter is now returned when a web API is used to modify or return information about a customer.
Dashboard
- The
top destinations
configuration field is now configurable on a store level. Previously, it was configurable on the global level only. Fix submitted by Andreas von Studnitz in pull request 13052.
- When multiple validation errors occur while saving a customer address, Magento now shows unique messages in the
adminhtml
customer edit page. Fix submitted by adrian-martinez-interactiv4 in pull request 12922.
- The scroll bar on the Admin store switcher is now scrollable on machines running OSX. Fix submitted by Juan Alonso in pull request 12931.
Directory
- The
\Magento\Directory\Model\PriceCurrency::format()
method no longer fails if you do not configure a conversion rate from the base to the specified currency. Previously, if you did not specify this conversion rate, Magento rendered the price (amount) in the base currency, not the specified currency. Fix submitted by Nickolas Malyovanets in pull request 1022. GitHub-6965
- Magento now requires that customers select State/Province when shipping orders to India, and the checkout page now provides a drop-down field with appropriate values. Fix submitted by p-bystritsky in pull request. GitHub-12378
- You can now disable the State is Required for field. Fix submitted by Burlacu Vasilii in pull request 12917. GitHub-12894
EAV attributes
- Creating new configuration attributes no longer causes naming collisions in the JavaScript UI registry. Previously, when you created a new default attribute and then subsequently created a new product, JavaScript errors occurred. Fix submitted by Volodymyr Zaets in pull request 12945. GitHub-12555
- You can now use a single query to retrieve attribute groups from multiple attribute sets. Fix submitted by Marius Strajeru in pull request 12105. GitHub-11936
- Magento now saves multiselect attribute for a product that has a related product using another attribute set. Previously, multiselect attribute values were not saved for a product in the Admin panel when it had a related product that used another attribute set. Fix submitted by awarche in pull request 12767.
- The product attribute repository save method no longer resets the source model to null when you create a new product attribute through code. Fix submitted by Nickolas Malyovanets in pull request 1012. GitHub-10814
- Magento now uses the correct
entity_model
intable eav_entity_type
for invoices (Magento\Sales\Model\ResourceModel\Order\Invoice
). Previously, intable eav_entity_type
forentity_type_code = "invoice"
theentity_model
wasMagento\Sales\Model\ResourceModel\Order
. Fix submitted by Nickolas Malyovanets in pull request 980. GitHub-10123
- When a validation message is returned, Magento no longer displays the attribute code (
$attrCode
), but instead returns the label ($label
). This change makes it easier to translate messages. Fix submitted by Hewerson Freitas in pull request 12120.
- You can now perform a mass update on products that have more than 60 attributes.
Magento\Eav\Model\Config::getAttribute
now stops the Profiler before it returns Profiler run time. Previously,Magento\Eav\Model\Config::getAttribute
did not stop the Profiler from returning early, and consequently reported incorrect run time. Fix submitted by Nick Anstee in pull request 12810.
- The
beforeSave
method encodes an attribute value only when it has not yet been encoded. Previously, the JSON-encoded attribute value was loaded correctly, but when you saved a product multiple times, the attribute value was also encoded multiple times. Consequently, Magento did save the product, and displayed this error, Unable to unserialize value. Fix submitted by Tibor Kotosz in pull request 13551.
- The deprecated
each()
function has been removed from the code. Fix submitted by Ihor Sviziev in pull request.
- Order confirmation emails from the Admin in multistore environments no longer default to the primary store, but instead are sent from the store that the customer used. Fix submitted by Roman K. in pull request. GitHub-11740
- Magento no longer sends misleading feedback when sending tracking information email. Previously, instead of sending a notice that a shipment was underway, this response was sent, You sent the shipment. Fix submitted by Nickolas Malyovanets in pull request 1245. GitHub-5697
Frameworks
- You can now switch to default mode from production mode. Previously, if you tried to switch back to default mode, Magento displayed this error,
Cannot switch into given mode 'default'
. Fix submitted by Etty in pull request 12752. GitHub-4292
vendor/magento/framework/composer.json
now declares a dependency onmagento/zendframework1
. Previously, packages depending onmagento/framework
packages failed to execute. Fix submitted by Ihor Sviziev in pull request 12990. GitHub-12967
- The
filePutContents('file.txt')
now contains content as expected. Previously, Magento threw this error,The specified "file.text" file could not be written
. Fix submitted by Nickolas Malyovanets in pull request 962. GitHub-7467
- You can now subscribe to events that contain a number in their name. Fix submitted by Mobecls in pull request 12758. GitHub-5035
- PhpDoc now shows correct parameter types. Previously, PhpDoc showed only a type of
string
, althougharray
was also a valid parameter type. Fix submitted by Freek Vandeursen in pull request 12826.
- Content no longer jumps when pages are reloaded on the Admin because
notices-wrapper
now has amin-height
setting. Fix submitted by Anna Völkl in pull request 12985.
- We’ve corrected a typo in the
Magento\Ui\Controller\Adminhtml\Index\Render
action. Fix submitted by Nick in pull request 12951.
X-Magento-Vary
andPHPSESSID
now have the same expiration time. Previously, theX-Magento-Vary
cookie had an expiration ofsession
, which meant it was not considered expired until the browser was closed. In contrast, thePHPSESSID
cookie had a finite expiration time (notsession
). At times, this resulted in Magento caching the wrong page for the logged-in user.
\Magento\Config\Model\Config\Structure\Reader::processingDocument
now throws a more helpful validation exception. Fix submitted by Patrick McLain in pull request 12859.
- Creating an observer that uses
ObserverInterface
no longer triggers a patch-level dependency onmagento/framework
. Fix submitted by Kristof in pull request 13759.
- RewriteBase directive has been added to the
.htaccess
file inpub/static
to support the potential installation of Magento code under a directory inside the web root. Fix submitted by Cristiano Casciotti in pull request 13678.
- The doc block of the
walk
method in a collection now correctly describes that the method accepts a string or array. Fix submitted by ByteCreation in pull request 13373.
- The report processor now returns an HTTP 500 status code (which better communicates the need for user action) instead of a 503 status code. Fix submitted by Andrew Howden in pull request 11513. GitHub-11512
App framework
- The customer grid indexer now works as expected. Previously, this indexer did not work when reindexing using the command-line interface during upgrade. Fix submitted by Leonid Poluyanov in pull request 10838. GitHub-10838
expectException()
calls now accept two parameters (instead of one). Fix submitted by Fabian Schmengler in pull request 11099. GitHub-11059
- The
findAccessorMethodName()
method (Magento\Framework\Reflection\NameFinder
) now provides a more helpful exception message. Fix submitted by Roman K. in pull request 12303. GitHub-9764
- Customers with an empty Date of Birth field can now be saved even when the field is not marked (or checked on the JavaScript side) as mandatory. Fix submitted by Vova Yatsyuk in pull request 12302. GitHub-12146
- You can now alter the transport variable in the
email_invoice_set_template_vars_before
event. Fix submitted by Roman K. in pull request 12132. GitHub-10210
- Validation of South Korean zip codes now supports current South Korean zip code format. Fix submitted by Roman K. in pull request 903. GitHub-9515
Configuration framework
- Scope-based configuration now decrypts data as expected. Previously, scope-based configuration failed to decrypt data on the default store only. Fix submitted by DubovykOleksandr in pull request 8591.
JavaScript framework
- The
depends
field now works for fields of typeradio
insystem.xml
. Fix submitted by Javier Villanueva in pull request 11539.
- Magento now sorts fields and amounts as expected when you extend a dynamic-row element in a
ui_component
and add a sort order attribute with an amount that falls between the other elements’ amount. Fix submitted by Harald Deiser in pull request 11846.
Session framework
- The Setup Wizard page now loads successfully when the session storage method is memcache. Previously, Magento returned an HTTP 500 error when you navigated to System > Tools > Web Setup Wizard Setup Wizard in installations where you’ve configured the session storage method to memcache in
env.php
. Fix submitted by Marty S in pull request 11608. GitHub-9633
- When you add a product to your wish list after logging out, Magento now redirects you to your account wish list page and adds the product. Previously, you were redirected to your wish list page, but Magento did not add the product. Fix submitted by Oscar Recio in pull request 12038. GitHub-11825
- Anonymous calls using REST no longer trigger the creation of PHP sessions. Fix submitted by serhii-balko in pull request 1247. GitHub-7213
Web API framework
- A user who has been denied permissions for negotiable quote editing can now create customer addresses.
- Swagger now works as expected on instances of Magento that are running on non-standard ports. Fix submitted by JeroenVanLeusden in pull request 12541.
- You can now set attribute values to empty strings using REST. Previously, Magento would not let you use REST to pass the following attributes with empty values:
special_from_date
,special_to_date
, andspecial_price
. Fix submitted by Roman K. in pull request 916. GitHub-8862
- We’ve updated the
webapi
module to improve the order of how arguments are merged in multipledi.xml
files. Fix submitted by serhii-balko in pull request 995. GitHub-8647
SearchCriteriaBuilder
now has a check to determine if sort order should be applied. Previously,SearchCriteriaBuilder
built wrong criteria (ORDER BY part
). Fix submitted by Nickolas Malyovanets in pull request 1003. GitHub-5738
- Anonymous Web API access to the Admin now unlocks REST catalog calls without requiring
auth
tokens. Fix submitted by Roman K. in pull request 904. GitHub-9468
Zend framework
vendor/magento/framework/composer.json
now declares a dependency onmagento/zendframework1
. Previously, packages depending onmagento/framework
packages failed to execute. Fix submitted by Ihor Sviziev in pull request 12990.
General
- A customer can now successfully log out of a session and then immediately log back in. Previously, if a customer logged out and then attempted to log in without the logout success page first completing its timeout, Magento displayed the logout page. Fix submitted by Vinay Shah in pull request 13040.
- Magento now displays notification messages for only the expected duration. Previously, Magento displayed these messages indefinitely within a session. Fix submitted by p-bystritsky in pull request 1111. GitHub-11527
- Sorting by product name now works as expected when filters are applied. Fix submitted by p-bystritsky in pull request 1192. GitHub-12860
- We’ve removed the
Magento\ProductAlert\Controller\Add\TestObserver
class. Fix submitted by Alexander Shkurko in pull request 13174.
- In the top-level README file in the Magento Open Source repository, all links to DevDocs have been updated to 2.2. Fix submitted by Bhargav Mehta in pull request 13161.
- Elements within an array in
store_website
table are now correctly formatted. Fix submitted by Nolwennig Guilbert in pull request 13324.
- A type error in
CartTotalRepository
has been resolved. Previously,CartTotalRepository
could not handle extension attributes in quote addresses, and Magento threw aPHP Fatal error: Uncaught TypeError
. Fix submitted by p-bystritsky in pull request 12993. GitHub-12993, GitHub-12819
- The WYSIWYG editor image insertion process now takes into account the static URLs configuration value (configuration setting
cms/wysiwyg/use_static_urls_in_catalog
). Fix submitted by Nickolas Malyovanets in pull request 1215. GitHub-12147
- The
<![CDATA[]]>
statement in thesystem.xml
file now works as expected. Previously, when you entered an XML layout update with CDATA for the first time, it worked as expected. After you saved the file, however, theCDATA
tag disappeared. Fix submitted by serhii-balko in pull request 1163. GitHub-12322
- Magento now strips out unnecessary whitespace in the attribute value IDs used on the review form. Previously, rating titles with whitespace resulted in broken ID attributes. Fix submitted by Nickolas Malyovanets in pull request 1119. GitHub-5451
- The header label Price in the invoice PDF is now correctly aligned with the invoice item’s price. Fix submitted by serhii-balko in pull request 1216. GitHub-8453
- Google Analytics
pageview
is no longer triggered twice. Fix submitted by Bhargav Mehta in pull request 13034. GitHub-12221
- Minor display issues on the Magento home product page have been resolved. Fix submitted by Punit Vaswani in pull request 13081. GitHub-11796
- We’ve removed a condition from the password reset strength meter that caused a JavaScript error. Fix submitted by Alisson Oldoni in pull request 13429.
- The copyright year has been updated to 2018. Fix submitted by Bhargav Mehta in pull request 13027.
- Magento now displays the Contact Us page in the menu as expected. Previously, Magento displayed unnecessary space between the category page and the main footer. Fix submitted by Sanjay Patel in pull request 13026. GitHub-12601
- The
Learn More Link
widget option in the Recently Viewed Products widget now respects its setting. Fix submitted by JeroenVanLeusden in pull request 12946.
- An unused
if
statement in the order invoiceSave.php
has been removed. Fix submitted by JeroenVanLeusden in pull request 12887.
- The
sid
variable no longer appears in the storefront URL even if it has been disabled in the Admin. Previously, even when the Magento setting General > Web > Session Validation Settings > Use SID on Storefront was set to No, thesid
variable no longer appears in the URL. Fix submitted by Roman Strelenko in pull request 12743. GitHub-9453
-
The menu item handling has been refactored to read item data from two different sources:
- from original XML definition if the cache is empty
- from transformed item data when available in the cache. Fix submitted by Pavel in pull request 12747. GitHub-9720
- A typo in the
SINGLE_PRODUCT_LAYOUT_HANLDE
constant has been fixed. Fix submitted by Andreas Schrammel in pull request 12786.
- The tracking link no longer returns a 404 error in the Admin. Fix submitted by Ihor Sviziev in pull request. GitHub-12206
- The product option value price calculation has been improved. Previously, tier prices and customs options were not calculated correctly. Fix submitted by Marina Gociu in pull request 11563. GitHub-5774
- White space that is prepended to a coupon code no longer causes an error. Previously, Magento did not apply the coupon and displayed this message:
Coupon code is not valid
. Fix submitted by Roman K. in pull request 1021. GitHub-12656
- The modified date field on editing pages is now updated as expected. Fix submitted by Oscar Recio in pull request. GitHub-12625
- Links to Magento Connect on the Partners and Extensions page have been removed and replaced with links to Magento Marketplace. Fix submitted by Miguel Balparda in pull request 12633. GitHub-12632
- HTML tags have been removed from the display of attribute names in the dropdown menu of the Catalog Product list. Fix submitted by Nickolas Malyovanets in pull request 968. GitHub-8011
- Magento now displays the orders that are associated with customer accounts on the Orders page. Previously, in the Admin display of customer accounts that have orders associated with them, Magento did not display orders on the Orders tab but instead displayed a blank page.
- The credit card form is now available when you create an order from the Admin, even when only one payment method is enabled. Previously, when only one payment method was enabled, the Admin did not render this form.
- Full Page Cache is no longer invalidated after you save a predictor category. Previously, all product-related cache data was invalidated, when only a narrow subset of cache tags associated with the
product_id
should have been.
- Magento now displays a more meaningful error message when a module name is misspelled in a unit test. Fix submitted by Nickolas Malyovanets in pull request 13740.
- Magento now displays a more meaningful error message when a module name is misspelled in
registration.php
. Fix submitted by Jānis Elmeris in pull request 12843.
- In the line
Perform login specific action
inStorageInterface.php
,login
has been replaced withlogout
. Fix submitted by David Angel in pull request 13679.
- The incorrect field value in the joined
variable_value
table has been replaced with two values:plain_value
andhtml_value
. Fix submitted by Maksymilian Szydło in pull request 13596.
- Duplicate array keys in
app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php
andapp/code/Magento/Downloadable/Helper/File.php
have been removed. Fix submitted by Leandro F. L. in pull request 12513.
- The typo in the
getDispretionPath
function name has been corrected togetDispersionPath
. Fix submitted by PascalBrouwers in pull request 12507. GitHub-12506
- Magento now saves new orders created by guest accounts to the Order display as expected. Previously, Magento did not display the order with the customer information assigned to it, and although Magento sent email containing the order ID, the email did not contain information about the ordered items. Fix submitted by Roman K. in pull request 12241. GitHub-10128
- CAPTCHA labels now reflect both the symbols and letters associated with the CAPTCHA image. Previously, the text labels referred to the CAPTCHA image referred to letters only, despite there being numbers in the CAPTCHA images, too. This ambiguity had the potential to mislead users about which text to enter. Fix submitted by RhodriOwainDavies in pull request 12387.
- The
robots.txt
response header content type is now plain text. Fix submitted by Milan Osztromok in pull request 12310.
- Customers can now successfully use RSS to share their wish lists. Previously, when a logged-in user added products to the wish list and then tried to share them using RSS, Magento threw this exception:
report.INFO: Broken reference: the 'wishlist.email.rss' element cannot be added as child to 'root', because the latter doesn't exist
Fix submitted by mediactbv in pull request.
- When you select a new main menu option, the previously selected menu item now loses the
ui-state-active
class as expected. Fix submitted by Arnoud Beekman in pull request 13341. GitHub-13327
- Issues with displaying full-screen images and video on the configurable product page have been resolved. Previously, Magento displayed video associated with product options on this page as images, rather than video, and full-screen mode for images ignored the configurations settings in
view.xml
. Fix submitted by Ievgen Shakhsuvarov in pull request 991. GitHub-12268
- We’ve fixed issues with the “report module enable/disable changes as deployment markers” functionality in the
Magento_NewRelicReporting
module. Previously, if New Relic’s cron was enabled, Magento sent a New Relic deployment marker for every enabled module once per cron period. This resulted in an excessive number of events. Fix submitted by Kristof in pull request 12477.
- The New Product Configuration process now works as expected from the Admin. Previously, on the last step of this process, Magento displayed the
the element.disabled is not a function
message, and did not create the product variations as expected. GitHub-12555
- Save operations on CMS pages now load from
pageRepository
. Fix submitted by JeroenVanLeusden in pull request 13814.
- Magento now correctly displays product titles when displaying Sales information in Google Analytics. Previously, Magento replaced spaces in product names with their HTML values (for example,
\u0020
). Fix submitted by Julien Anquetil in pull request 13844. GitHub-13827, GitHub-13350
Import/export
- You can now successfully import product images and image labels from CSV files. Previously after import, the alt text field on the Admin was empty, even though the label was imported and was visible on the product list page as alt attribute, and the Product Detail page missed the alt attribute on image fields. Fix submitted by Ben Robie in pull request 11323. GitHub-9931
- The CSV file created by using System > Export now incorporates the value of
hide_for_product_page
. Fix submitted by Nickolas Malyovanets in pull request 11926.
- You can now import a value of zero (0) into a custom attribute when using the Admin product import feature. Fix submitted by p-bystritsky in pull request 12283. GitHub-12083
- You can now import or export a specific store view that includes custom options and bundle product options. Previously, the import/export feature did not include store view-level edits for custom options.
- Import no longer fails when you import products with image filenames containing round brackets from a CSV file. Fix submitted by p-bystritsky in pull request 1017. GitHub-12084
- When you import information about existing customers, Magento now changes only the specific rows for this customer. If rows for other customer attributes (for example,
group_id
,store_id
,created_at
) are absent in the import file, these values are included unchanged.
- Magento now provides a test for adding values in the system variable collection unit test. Fix submitted by Nickolas Malyovanets in pull request 13742.
- You can now successfully import configurable products with specified configurable links when the
store_view_code
setting isn’t set. Previously, you could successfully import a configurable product with both configurable and additional attributes, but when you viewed the category to which the product belonged, the product was not displayed. GitHub-5876
- Save operations on CMS blocks now load from
pageRepository
. Fix submitted by JeroenVanLeusden in pull request 13796.
- The default storefront welcome message now works as expected when the Translate Inline (Stores > Settings > Configuration > Advanced > Developer >) setting is enabled. Fix submitted by Paresh Pansuriya in pull request 13038. GitHub-12711
- You can now use the layout update XML field to include custom CSS in CMS pages. GitHub-4454
- Magento now correctly displays product titles when displaying Sales information in Google Analytics. Previously, Magento replaced spaces in product names with their HTML values (for example,
\u0020
). Fix submitted by Julien Anquetil in pull request 13844. GitHub-13827, GitHub-13350
Indexing
- The URL that points to Magento
crontab
documentation has been updated to reflect current cron documentation inapp/code/Magento/Indexer/Model/Message/Invalid.php
. Fix submitted by Robbie Thompson in pull request 13050.
- You can now view the state of the mview queue in real time, which can be useful when debugging indexing issues. You can now view how many items are in the queue pending processing, as well as view information from the
mview_state
table. Fix submitted by Luke Rodgers in pull request 12122.
Infrastructure
- Zoom now works as expected when using dropdown menus. Previously, zoom worked fine, but when you hovered over the category dropdown menu to the overlap area of product image and dropdown menu, the zoom was abnormally active, even though the mouse was still on the dropdown menu. Fix submitted by Mayank Zalavadia in pull request 13084. GitHub-5129
- RequireJS loading issues that occur when ad blockers are active have been resolved. Previously,
uBlock
(or any ad blocker) forbade thetrackingCode.js
file from loading, which prompted RequireJS to throw an exception. This exception broke the JavaScript execution flow and caused unexpected issues throughout the storefront. Fix submitted by Yonn Trimoreau in pull request 13061.
continue()
has been removed from templates. Fix submitted by Ihor Sviziev in pull request 13076.
- The comment that marks the
\Magento\Checkout\Model\Cart
class as deprecated now includes a pointer to an alternative class. This fix is part of an ongoing effort to add pointers to valid replacements when marking methods and classes as deprecated. Fix submitted by Fabian Schmengler in pull request 13061. GitHub-10133
- A new file (
CODE_OF_CONDUCT.md
) that defines standards for how to engage in the community has been added. Fix submitted by Ievgen Shakhsuvarov in pull request 12723.
\Magento\Framework\Data\Tree::getNodeById()
no longer contains an invalid type in its PHPDoc block. Fix submitted by Roman K. in pull request 964. GitHub-8507
- We’ve resolved naming collisions that previously occurred in the Javascript UI registry. Previously, these naming collisions resulted in the following behaviors: Magento displayed the
element.disabled is not a function
message, and did not create product variations as expected. GitHub-12555
Newsletters
- The About Us and Customer Service links of the Order Confirmation email (and other emails sent to the customer) now work as expected. Fix submitted by Roman K. in pull request. GitHub-12261
- Magento now sends the newsletter subscription success email as expected when a customer successfully subscribes to a newsletter. Fix submitted by Styopchik in pull request. GitHub-12439
- Magento now uses indexes to retrieve subscriber information during the creation of email to newsletter subscribers. Previously, Magento did not use indexes for this task, and performance was poor. Fix submitted by Amit Bera in pull request. GitHub-12787
- Magento no longer sends multiple confirmation emails when a customer successfully subscribes to a newsletter. Fix submitted by Torben Höhn in pull request 13044. GitHub-12876
- The text of the Subscribe to Newsletter button now wraps correctly. Fix submitted by monaemipro in pull request 13041. GitHub-12320
Orders
- Magento now shows all products as expected in the Recently Ordered list when a customer places an order that contains products from multiple stores. Previously, in installations with two storefronts, if a customer added products from both stores to the same shopping cart, and placed a single order, the recently ordered product list would not show all ordered products.
- The
getDefaultStoreLocale()
method has been added to allow for the fetching of scoped values. Use this method ingetCreatedAtFormatted()
to ensure that Magento translates thecreated_at
order date in emails for the locale being used in that store view. Fix submitted by JeroenVanLeusden in pull request 11067.
- You can now successfully open the Order edit page for orders that contain an address with extension attributes. Previously, when you tried to open this page, the page load failed with this error,
Recoverable Error: Object of class Magento\Sales\Api\Data\OrderAddressExtension could not be converted to string in .../module-sales/Model/AdminOrder/Create.php on line 503
.
- Magento now saves an invoice ID on the credit memo when you create a credit memo from the invoice in the Admin. Previously, the invoice ID was not included. Fix submitted by Anton Evers in pull request 11067. GitHub-11669
- Credit memos can have the state open (
\Magento\Sales\Model\Order\Creditmemo::STATE_OPEN
). As a result, you can create a credit memo with an ID that still has to be refunded, and existing credit memos should be refundable if their state is open. Fix submitted by Anton Evers in pull request 11550.
- The
Magento\Sales\Service\V1\OrderCreateTest
test now has the correct shipping method fixture. Previously, this test contained an incorrect shipping method fixture, which produced an error whenever an order’s shipping method was treated an object. Fix submitted by andrew-garside-temando in pull request 12227.
- When you create a credit memo comment with
POST /V1/creditmemo/:id/comments
, Magento now sends credit memo update emails as expected. Previously, Magento did not send this email, and no other transaction emails were sent to the customer.
- The
getReservedOrderId()
method now uses the current store as expected instead of the default store. Fix submitted by Timon de Groot in pull request 11702. GitHub-9055
- When you are editing an order’s shipping or billing address, Magento now displays the allowed countries from the correct store view. Previously, possible addresses were derived from the wrong store view. Fix submitted by Roman K. in pull request. GitHub-12560
- The
\Magento\Sales\Model\Order\Pdf\AbstractPdf::drawLineBlocks
method now works as expected. Previously, when a text block spanned more than one page, Magento threw aZend_Pdf_Exception
error, and displayed this error:Font has not been set
. Fix submitted by serhii-balko in pull request 1016. GitHub-11743
- Magento no longer exports extra records when you export invoices for multiple orders. Fix submitted by Sanjay Patel in pull request 13208. GitHub-12714
- You can now place orders using PayPal when Payment Action = Order. Previously, when Payment Action = Order, Magento displayed this error when you reached the order review page:
We can't place the order.
- The cancel order and restore quote methods now accurately calculate the amount of stock to be returned to inventory when an order is canceled. Previously, when you canceled an order, some of these methods did not accurately calculate the amount of restored stock. Fix submitted by Danny Verkade in pull request 12668. GitHub-9969
- Join extension attributes are now added as expected to order results when the order is created using REST. Fix submitted by Nickolas Malyovanets in pull request 1168.
- The Shipment Tracking REST API now throws an error as expected if the specified order doesn’t exist. Fix submitted by Roman K. in pull request 1162.
- Invoices now display the exact quantity of a product ordered, even if it is a fractional unit (for example, 6.5). Previously, when Magento tried to invoice an order that had products with quantities that required decimals, it rounded down the quantity to the nearest whole number in the invoice. Fix submitted by Nickolas Malyovanets in pull request 11997. GitHub-11941
Payment methods
- The multishipping checkout flow now supports the CyberSource payment method. This payment method is supported on Magento Commerce only. However, as part of the process of adding CyberSource support, we’ve made improvements to the Multishipping module to simplify integration process for other payment methods.
- Logged-out customers can no longer see previously saved credit cards. Previously, users logged in as guest could see some payment information from an earlier, canceled order.
- Third-party developers can now customize payment errors messages for payment integrations based on the Magento Payment Provider Gateway.
- PayPal Express Checkout now appears as a payment option on the Checkout page when the PayPal buttons are available on the shopping cart page. Previously, PayPal did not appear as a payment method on the Checkout page when the billing agreement was disabled, although the PayPal buttons were still available on the shopping cart page.
- You can now view order details for an order created with a custom offline payment method. Previously, Magento displayed PHP warning (undefined index) instead of the order details. Fix submitted by Alex in pull request 12296. GitHub-3596
- Magento no longer disables the BrainTree Place Order button after a failed payment validation. Fix submitted by Ievgen Sentiabov in pull request 12902.
- The
is_active
andis_visible
columns now default to true even when column default values are not set in thevault_payment_token
installation script. Fix submitted by helloitsluke in pull request 12965.
- If you’ve chosen a custom payment method that is offline when you create an order, Magento now displays that payment method’s name as expected when you view order details in Payment & Shipping. Fix submitted by zamoroka in pull request 12731. GitHub-12209
- PayPal now works as expected with virtual products such as gift cards. Previously, when you tried to place an order for a virtual product using PayPal, Magento did not display the PayPal popup when you clicked Continue PayPal during checkout.
- Magento now correctly adds checkout agreements data to requests and validates payment information when you place an order using PayPal Express. Previously, you could check this box, but Magento did not parse the agreements data or pass it to the set-payment-information API. This failure in turn triggered the
CheckoutAgreements
validation plugin, which failed to validate. Fix submitted by Ričards Zālītis in pull request 12401.
- Magento no longer archives active orders that are placed using PayPal Express Checkout. Previously, if you placed an order using PayPal Express Checkout, Magento would place the order as expected but also add it to the list of archived orders.
- Magento now correctly displays transparent
.PNG
watermarks on JPEG images. Previously, Magento did not correctly display a transparent watermark as expected on an image, but instead displayed a white outline of the box where the watermark should be. Fix submitted by Elze Kool in pull request 11060. GitHub-10661
- We’ve improved the display of the Payment Methods section of the checkout page on mobile devices. Previously, the layout of page elements was not correctly spaced. Fix submitted by Marcin Kwiatkowski in pull request 13777. GitHub-13315
- Magento now correctly updates the credit memo total when a merchant issues a refund. Fix submitted by serhii-balko in pull request 1185. GitHub-11798
Performance
- The addition of a cache for the
getimagesize()
function has improved product image loading.
- Each cache type now has its own separate cache storage.
- We’ve optimized the initialization of the Product View block, which gives an 11% performance improvement for simple product views.
- Magento now caches search results for faster response time on popular searches. A system administrator can configure how many top search queries can be cached. This enhancement can result in up to a 36% improvement for cacheable search terms.
Quote
- If a customer changes the currency type of his order-in-progress while viewing the shopping cart, Magento displays a message that shows the minimum order necessary in the new currency. Previously, this minimum was calculated incorrectly. Fix submitted by Neeta Kangiya in pull request 13039.
- Magento no longer truncates very long telephone numbers in the order page. Previously, Magento cut off very long phone numbers at 20 digits. Fix submitted by Danny Verkade in pull request 13015. GitHub-10869
- You can now implement a product attribute that sets Catalog Input Type for Store Owner equal to Fixed Product Tax in a multistore environment. Fix submitted by Danny Verkade in pull request 13019. GitHub-12393
- When a customer is on the payment page and tries to reorder or retrace her steps backward through the checkout process, Magento now displays all the relevant shipping methods. Previously, Magento displayed only one shipping method under these circumstances.
- An integrity constraint violation error no longer occurs after you reorder a product with custom options. Fix submitted by Vinay Shah in pull request 13036. GitHub-12705
Reports
- The Products in Cart report is now accurate. Previously, if you created a Products in Cart report (Open Reports > Marketing > Products in Cart) after deleting a product from the catalog, the report displayed a blank list of products. Fix submitted by angelo983 in pull request 12539.
- You can now successfully export the Ordered Products report to a CSV file. Previously, the export file contained no report data.
SalesRule
- Magento now displays the correct catalog rule price for bundle products with custom options.
- Cart prices now displays the Cart Price Rule shipping discount correctly. Previously, when you placed an order, Magento displayed this error:
Payment method is not available
.
- Magento now displays the exact label value that was given in the Admin during the cart price rule creation. Fix submitted by Ihor Sviziev in pull request 13141. GitHub-11428, GitHub-11497
- Magento now correctly displays in Cart Price rules the nesting levels for categories with nesting levels that exceed three levels.
- Coupon codes that a customer applies to a subsequently canceled order are now available for re-use as expected. Previously, once a customer canceled this order, he could not apply the coupon code to another order. Fix submitted by p-bystritsky in pull request. GitHub-12817
Search
- Magento now displays popular search terms in SEO & Search > Search Terms as expected. Fix submitted by p-bystritsky in pull request 1024. GitHub-10743
- Layered navigation now displays the correct product count. Previously, the layered navigation product count incorrectly included only in-stock products. Fix submitted by Roman K. in pull request 12063. GitHub-11946
- Grid filtration now handles MySQL special characters as expected. Fix submitted by laconica-sergey in pull request 12749.
Shipping
You can find Magento Shipping-specific release notes in Magento Shipping Release Notes.
- The handling fee configuration of shipping methods is now explicitly cast to 0 to avoid warnings from PHP 7.1. Fix submitted by Fabian Schmengler in pull request 13680.
- Unused
count($_items)
in templates have been removed. Fix submitted by Alexander Shkurko in pull request 12901.
- Magento now enforces the minimum order amount during checkout as expected. Previously, you could bypass the minimum order amount logic by clicking Check Out with Multiple Addresses, removing products from the order,and then clicking Update Qty & Addresses. Fix submitted by Roman K. in pull request 963.
- DHL product codes now match those published in the latest DHL products and services guide. Previously, three DHL product codes in the DHL Shipping module were incorrect. Fix submitted by gwharton in pull request 12666.
Sitemap
sitemap.xml
now displays URLs without/home
appended. Fix submitted by Oscar Recio in pull request 12649. GitHub-12446
- Sitemaps generated in a multi-store environment now include the correct URLs for each store (that is,
http://storename.com/
instead ofhttp://defaultstore.com/
). Fix submitted by Roman K. in pull request 935. GitHub-12482
- Magento now handles errors that occur during sitemap generation in a less intrusive way. If Magento throws an exception when generating a sitemap, it now sends the errors through email as configured in the sitemap configuration XML. The former
_translateModel
property is not used anymore, and the inline translation is correctly suspended using theinlineTranslation
property instead. Fix submitted by Marina Gociu in pull request. GitHub-10502
Swagger
- The code formatting in the Swagger block and template has been updated. Fix submitted by JeroenVanLeusden in pull request 13485.
Swatches
- You can now use REST to import visual swatch attribute options. Previously, you could not add swatch options using service contracts unless a swatch option already existed for the attribute. Fix submitted by gonzalopelon in pull request 12044. GitHub-9410, GitHub-10707, GitHub-10737, GitHub-11032
- Visual swatches that have a color assigned now show that color in the swatch box. Previously, Magento did not display any color in the color swatch box. Fix submitted by Chris Pook in pull request 13101. GitHub-11828
- The error message displayed when you do not supply enough information during swatch creation has been edited for clarity and grammatical accuracy. Fix submitted by Nickolas Malyovanets in pull request 1117. GitHub-5550
Tax
- The default selector on the Admin’s tax rule edit page now selects only the correct container (tax rate) following the Tax Rate multiselect. Previously, the default selector selected three elements, which resulted in inaccurate results. Fix submitted by Pieter Hoste in pull request 13643. GitHub-12791
- We’ve removed the redundant default discount tax calculation (
tax/calculation/discount_tax
) fromMagento/Tax/etc/config.xml
. Fix submitted by Vincent Marmiesse in pull request 13449.
- The Not yet calculated text string immediately adjacent to the string Tax on the checkout page is now translated as expected. Fix submitted by Roman K. in pull request 1147. GitHub-7849
- Magento no longer displays incorrect tax amounts for orders when using a non-default tax configuration.. Fix submitted by Pieter Cappelle in pull request 12639. GitHub-10347
Testing
ConfigurationTest
no longer fails when you install Magento using Composer. Fix submitted by Nickolas Malyovanets in pull request 1161. GitHub-12574
- We’ve added
MagentoStyle
as console Input/output in Travis tests.
- We’ve reimplemented tests using Jasmine as part of the process of removing the legacy JavaScript test framework and completely removing
JSTestDriver
support. Fix submitted by Carlos Lizaga in pull request. GitHub-12342
functional.suite.dist.yml
now handles custom backend names. Previously, the value for thebackend_name
configuration was hardcoded. Fix submitted by scribam in pull request 12884.
- We’ve added a missing preference for
ObjectManager\ConfigInterface
in integration tests. Fix submitted by Fabian Schmengler in pull request 12845. GitHub-12844
- Integration Test Annotation
magentoAppArea
no longer breaks with valid values. Fix submitted by Nickolas Malyovanets in pull request 996. GitHub-2907
- The inline documentation of the static test for XSS vulnerabilities now reflects that
@escapeNotVerified
is disallowed in Magento versions equal or greater than 2.2. Fix submitted by Matthias Zeis in pull request 12639.
- We’ve added integration tests for product URL rewrite generation. Fix submitted by Adrien Louis-Rossignol in pull request 13567. GitHub-5863, GitHub-8227, GitHub-8957, GitHub-10073, GitHub-13240
Themes
- Magento no longer caches warning messages as often as a customer clicks the Update Shopping Cart button while the shopping cart page loads. Previously, Magento cached a warning message each time a customer clicked this button while the page loaded in Firefox or Chrome, and this action resulted in multiple warning messages appearing on the top of the shopping cart page.
- If a customer is logged in while Magento loads, then the welcome message displays the customer’s full name. Fix submitted by Oleh Kravets in pull request 12738. GitHub-12719
- You can now disable the full screen gallery on mobile devices Fix submitted by p-bystritsky in pull request 1006. GitHub-12490, GitHub-12285
- Protected method
getHtml
now checks each child for an existing class and then appends the$outermostClass
if true. Previously, when creating a dependency injection for theMagento\Theme\Block\Html\Topmenu
class, you could not change class names on children in abeforeGetHtml
method becausegetHtml
declaressetClass()
on all child items. Fix submitted by jonshipman in pull request 12862.
- Customers can now successfully close full-screen zoomed product images displayed on an iPhone 4s, 5s, 6, or 6s with the Safari browser. Previously, if a customer chose full screen zoom for any product image, he could not close the full screen zoom.
Translations and locale
- Inline translations and custom translators now work for Knockout templates. Fix submitted by Dmitry Fedyuk in pull request 12953. GitHub-2156
- Magento now provides a locale for Swedish (Finland). Fix submitted by Nickolas Malyovanets in pull request 1207. GitHub-13095
- Magento now uses current locale (as defined in Stores > Settings > Configuration > Advanced Reporting) when translating the time zone label. Previously, Magento used operating system settings instead of current locale. Fix submitted by adrian-martinez-interactiv4 in pull request 13408.
- Newsletter labels can now handle Chinese language. Fix submitted by Dasharth patel in pull request 13029. GitHub-12320
- The module responsible for generating the
js-translations.json
file now contains a routine that translates strings in tags such as<translate args="This won't be translated"
. Fix submitted by Matti Vapa in pull request 13528. GitHub-12081
User interface
- You can now configure a form field with validation range-words. As a result, Category Name is validated, and Category is created (or displays the correct error message, if validation fails). Previously, Magento displayed an error message in the console. Fix submitted by Robin Huy in pull request 12739.
- The Save Block button on the Add New Block page no longer ignores clicks if the content editor is empty. Fix submitted by Roman K. in pull request 1032. GitHub-8114
- Magento now disables the promo code input box after a user applies a promo code. Fix submitted by Chirag P in pull request 13030.
- Magento now displays video and images as expected when you select a video or click to view a full-screen image for a configurable product. Fix submitted by Chumak Roman in pull request 12469. GitHub-12268
- The PHP notice that Magento displays when an invalid
ui_component
configuration is used has been improved. Fix submitted by Vova Yatsyuk in pull request 12239.
- Magento has added verification for previously set filters in
Magento/Ui/Component/Filters
, which has eliminated duplication of filters in collectionwhere
conditions.
- Inconsistency in the animation of the Admin spinner progress indicator has been corrected. Fix submitted by Neill Robson in pull request 13700.
URL rewrites
- When using a store code in a URL, Magento now retrieves the value of
Store_Code
from the store if the store code value is empty. Previously, under these circumstances, Magento threw an error. Fix submitted by Oscar Recio in pull request 12529. GitHub-8615
Web API framework
- You can now use the REST API to make requests that include a slash (/) in an SKU. Fix submitted by Roman K. in pull request 949. GitHub-8615
Wish list
- Magento now correctly displays a product’s special price when you add it to a wish list. Previously, if you added a product with a special price to the wish list, Magento displayed the product with its regular price.
- You can now remove an item description from a wish list. Fix submitted by p-bystritsky in pull request 981. GitHub-12582
Known issue
Merchants are unable to change a store view’s applied theme in Magento 2.2.4. When a merchant tries to change the Applied theme setting for a store view (Content > Design > Configuration), Magento does not change the theme, but instead displays this error: Something went wrong while saving this configuration: Area is already set
. See GitHub-14968 for more information. Workaround: Merchants who are running Magento 2.2.4 should upgrade to 2.2.5, then apply patch MAGETWO-93036.
Community contributions
We are grateful to the wider Magento community and would like to acknowledge their contributions to this release.
The following table identifies contributions from our community members. This table lists the external pull requests, the GitHub issue number associated with it (if available), and the community member who contributed the pull request.
System requirements
Our technology stack is built on PHP and MySQL. For details, see Technology stack requirements
Installation and upgrade instructions
See How to get the Magento software for complete installation and upgrade information.
Migration toolkits
The Data Migration Tool helps transfer existing Magento 1.x store data to Magento 2.x. This command-line interface includes verification, progress tracking, logging, and testing functions. For installation instructions, see Install the Data Migration Tool. Consider exploring or contributing to the Magento Data Migration repository.
The Code Migration Toolkit helps transfer existing Magento 1.x store extensions and customizations to Magento 2.0.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts.