Filter woocommerce_get_catalog_ordering_args has only one single argument $args, anyone filter this needs to detect the $orderby and $order value again which is already coded in the method where this filter returns. I hope adding two extra param $orderby and $order will make developer's life easier to hook this filter.
The algorithm to add a list of product categories to the query that order products of a given category by price was including only first level sub-categories since PR #20391. This was happening because `get_terms()` when called with the argument `parent` will only return direct children. To fix this and get all children for a given product category, it was necessary to replace `parent` with the argument `child_of`. See #20554 for a more detailed description of the issue that this commit fixes.
This commits improves the performance of the method WC_Query::get_layered_nav_chosen_attributes() when a site has a significant number of product attributes. Instead of looping over all existent product attributes to find which have been passed in the request, the new code loops over all the request parameters and checks which are valid product attributes.
On a test site with 2000 product attributes, the old version of WC_Query::get_layered_nav_chosen_attributes() was responsible for 25% of the shop page generation time. With the new version, the amount that this method contributes to the page generation time is negligible.
Related #20262
Commit 12d7bf7 added a specific query to order products by price from low to high on term archives (see #17690 and #16694 for more details), but, probably due to a copy and paste error, it changed the behavior when dealing with variable products. Instead of using the smallest variation price of each variable product, it was using the highest variation price. This commit changes this new query to use the smallest variation price of each variable product. This way ordering by price from low to high on term archives will again behave in the same way that on the shop page when dealing with variable products.