# Configuration

`wp-init` relies on declarative configuration, which encapsulates process of attaching hooks to
WordPress life cycle and provides some additional features, like filling DI container with your
services definitions.

## `hook_resources_path`

Pass a path to the file/directory with your hook actions. Configuration accepts any valid path
string, relative or absolute, either `hook_providers` or `__DIR__ . '/hook_providers/plugins_loaded.php'`

Files are mapped to hooks by name, so `woocommerce_init.php` is registered inside `woocommerce_init`
action. The exception is `index.php` file which is flushed immediately.

Example of a hook resource content:

```php
<?php
// plugins_loaded.php

return [
	MyCoolTitleChanger::class,
	AnotherHookAction::class,
	function ( Migarator $migrator ) {
		// You can even use a closure, to execute simple actions.
		// Arguments are injected by DI container.
		$migrator->migrate();
	}
];
```

## `services`

As you add more services with increasing complexity, you will need to provide some kind of
definitions for a DI container to create objects. Pass a path to a file, which will hold such
definitions. Refer to [php-di documentation](https://php-di.org/doc/definitions.html) for more
information on such file content.

> *Warning*
>
> If you are using _shortcut_ functions from `php-di/php-di` (e.g. `DI\autowire`, `DI\create`), you
> must load them first. Add `require __DIR__ . '/vendor_prefixed/php-di/php-di/src/functions.php';`
> to your plugin file.

## `cache_path`

Plugin header data and compiled DI container is cached in a directory specified by this
setting. Defaults to `generated`.

## `requirements`

**This setting only works when `wpdesk/wp-basic-requirements` is installed.**

Enables your plugin to check an environment requirement before instantiation, e.g. PHP version or
active plugins. Refer to [wp-basic-requirements documentation](https://gitlab.wpdesk.dev/wpdesk/wp-basic-requirements)
for more information on setting structure.

## `plugin_class_name`

**This setting only works when `wpdesk/wp-builder` is installed.**

When a plugin is used in [legacy mode](legacy.md), `plugin_class_name` is used to create an instance
of main plugin class. This setting is required to enable legacy mode. Despite that,
`WPDesk\Init\Plugin\Plugin` is still accessible to your services.