Скорее всего языковой плагин создает эти локации. Соответственно когда вы вызываете функцию, плагин еще не создал меню. Вызовите функцию по хуку plugins_loaded
Немного разобрался. Нужная языковая локация корректно устанавливается, если внести изменение в таблицу wp_options в поле polylang. И там длиннющий JSON из всех локаций. Если подставляю полученное id созданного меню к нужной локации, то всё ок.
Так вот если прямо после создания меню буду в mySQL запрос делать изменяя эту таблицу, это нормальная практика?