With te latest releases of WordPress, after updating to WP 5.3 it’s common to receive this error on some custom themes:
Warning: Declaration of _Nav_Menu::walk($elements, $max_depth) should be compatible with Walker::walk($elements, $max_depth, …$args) in…
This is caused by the introduction of the spread operator, as per official WordPress release note:
In WordPress 5.3, the PHP 5.6 spread operator has been introduced to WordPress in a number of places.
Using the spread operator allowed for simplifying the code and improves performance – both in speed as well as memory use -, especially as it has been introduced in a number of functions which are used a multitude of times during every single pageload, such as current_user_can() and add_query_arg().
Most plugins and themes should see no impact of these patches, other than the improved performance.
However, if your plugin/theme is impacted, you will need to take action.
In the file function.php we can use a workaround to adapt the Walk function and change it from:
function walk ($items, $depth) {
$this->elements = $this->get_number_of_root_elements($items);
return parent::walk($items, $depth);
}
To:
function walk ($items, $depth,...$args) {
$this->elements = $this->get_number_of_root_elements($items);
return parent::walk($items, $depth,...$args);
}
Hope this helps someone with the same problem, feel free to comment below!
Roberto