# Core Concepts

Redux is a single API that makes it simple to perform various features within WordPress. We'll go over a our basic concepts to properly grasp how Redux works.

# Never modify core files!

Redux is extremely extensible, which means you can override nearly anything using filters. You will never find a need to modify a core file unless you're helping us to solve a bug. NEVER modify anything inside of ReduxCore. If you want to change how a field works, build an extension instead. Need to modify a value when it's saved? Use a filter.

Why is modifying ReduxCore files a bad practice when embedded in my own product?

Redux is built to run with only one version of the framework code. If you modify core files in your version, which you embed in a product, there's no guarantee your version will be the version loaded should another product be using Redux. This will most likely cause conflicts and headaches for you and your clients. By using filters and extensions, you ensure that your code will always be loaded despite the "core" that is instantiated first.

# Object Structure

We need to understand the object structure of Redux in order to understand how it all fits together.

# Field

The lowest building block is a field. A field is what is displayed for a user to input data. It has it's own set of characteristics depending on the field type. At this level, whatever args are set to the field act as an override for all levels above.

# Section

A section is a grouping of fields. It groups everything together into it's own array. It containes a number of arguments that can be passed down to the fields below, provided the fields below do not specify those same arguments on their own declaration. Again, the fields level args override all.

# Box

In some cases, such as is with metaboxes, an extra grouping is required. Hence, a box. A box is simply a container with a bunch of sections within it. The primary purpose of a box is placement on the screen.

# Instance

Instance level arguments are known as global arguments. They impact all areas of the instance. Typically these are arguments that affect how Redux performs, but they can set an entire instance to display a control panel in the customizer only. If you're not sure what's going on, the problem may be in the global args.

Remember, there can be multiple instances of Redux running in a single WordPress install. This means that all products based on Redux, be it plugins or the theme can be running at once without impacting one another.

# Arguments

Every object has arguments and every level of nested objects can inherit or override those arguments. When looking at an argument, make sure you're thinking of how it will impact all the nested items below it (children).

# Global Arguments

Global arguments are those arguments which affect every field or how your instance of Redux performs. These arguments can enable/disable the customizer by default, change the menu title, and set fields to automatically output CSS or not. For a more detailed breakdown, visit the Global Arguments page as well as the docs related to each field and setting.

# opt_name, your unique instance key

One of the most important global variables is your opt_name. This is a unique key to distinguish your Redux instance from all others. It's also where your data is stored in the database and if you're using the global variable, how you access data within your code.

Choose an uncommon `opt_name` to avoid issues

If two instances of Redux use the same opt_name, they will only override one another's settings in order of occurrence. It is crucial that to pick a unique string for your product.