# simpleanalytics/1.110/src/Settings/Concerns/WordPressPageIntegration.php

Simple Analytics, version 1.110. 62 lines.

- Page: https://pluginprobe.com/plugins/simpleanalytics/1.110/code/src/Settings/Concerns/WordPressPageIntegration.php
- Raw: https://pluginprobe.com/plugins/simpleanalytics/1.110/raw/src/Settings/Concerns/WordPressPageIntegration.php
- Modified: 2026-04-13T08:46:00+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/simpleanalytics/1.110/code/src/Settings/Concerns/WordPressPageIntegration.php#L10-L20`.

```php
<?php

namespace SimpleAnalytics\Settings\Concerns;

use SimpleAnalytics\Settings\Blocks\Fields\Field;
use SimpleAnalytics\Settings\Tab;
use SimpleAnalytics\UI\PageLayoutComponent;

trait WordPressPageIntegration
{
    /** @return Tab[] */
    abstract function getTabs(): array;

    public function register(): void
    {
        add_action('admin_menu', [$this, 'wpAddMenu']);
        add_action('admin_init', [$this, 'wpAddFields']);
    }

    public function getOptionGroup(Tab $tab): string
    {
        return $this->getSlug() . '-' . $tab->getSlug();
    }

    /** @internal */
    public function wpAddMenu(): void
    {
        add_options_page($this->getTitle(), $this->getTitle(), 'manage_options', $this->getSlug(), (new PageLayoutComponent($this)));
    }

    /** @internal */
    public function wpAddFields(): void
    {
        foreach ($this->getTabs() as $tab) {
            $this->registerTab($tab);
        }
    }

    protected function registerTab(Tab $tab): void
    {
        $fields = array_filter($tab->getBlocks(), function ($block) {
            return $block instanceof Field;
        });

        foreach ($fields as $field) {
            $this->registerField($field, $tab);
        }
    }

    protected function registerField(Field $field, Tab $tab): void
    {
        register_setting(
            $this->getOptionGroup($tab),
            $field->getKey(),
            [
                'type'              => $field->getValueType(),
                'sanitize_callback' => $field->getValueSanitizer(),
            ]
        );
    }
}

```
