When WordPres doesn’t work the way you want it to … the WordPress core also provides multiple ways for you to customize. All customizations should be done with plugins or in a parent/child theme, but not all customizations are the same.
Most of my theme customization work in WordPress has to do with layout, which are generally done with CSS coding, but sometimes, I need WordPress or a theme to function differently. Then I need to work in functions.php
How to Customize WordPress without Losing your Customizations to Updates
The purpose of the functions.php file in a theme and in a child theme is tied in with the general need to be able to add customizations to WordPress without having your customizations lost every time you update WordPress. If your customizations can be put somewhere that is separate from the WordPress core, your theme and your plugins, updating those files won’t overwrite the new work you have added. That is the purpose of a child theme.
The ability to read your child theme is part of the WordPress core. The idea is that, if there is a child theme present, WordPress uses your customizations, in place of those functions in the core or the parent theme. That means that WordPress has to compare what is in the child theme with what is in the parent theme and only replace the code that is new … using code from the parent theme when it doesn’t exist in the child theme.
This process has a bit of a catch because CSS code, HTML code and PHP code are all very different and follow different rules. That means that the patterns you use to put new CSS code in your child theme is different from the patterns you use to put new PHP code.