<?php
|
|
namespace JVBase\registrar\config;
|
|
use JVBase\registrar\config\seo\Archive;
|
use JVBase\registrar\config\seo\Meta;
|
use JVBase\registrar\config\seo\Schema;
|
use JVBase\registrar\Registrar;
|
|
if (!defined('ABSPATH')) {
|
exit;
|
}
|
|
final class SEO extends Config
|
{
|
protected string $slug;
|
protected array $config;
|
public Schema $schema;
|
public Meta $meta;
|
public Archive $archive;
|
|
|
public function __construct(string $slug)
|
{
|
$this->slug = $slug;
|
$action = ucFirst($slug);
|
$this->config = [
|
'schema' => get_option(BASE.$action.'Schema', apply_filters(BASE.$action.'Schema', [])),
|
'meta' => get_option(BASE.$action.'Meta', apply_filters(BASE.$action.'Meta', [])),
|
'archive' => get_option(BASE.$action.'Archive', apply_filters(BASE.$action.'Archive', [])),
|
];
|
}
|
|
protected function initSchema():void
|
{
|
if (!array_key_exists('type', $this->config['schema'])){
|
error_log('Missing schema type');
|
return;
|
}
|
if (!class_exists($this->config['schema']['type'])) {
|
error_log('Could not find class: '.$this->config['schema']['type']);
|
return;
|
}
|
$this->schema = new Schema($this->slug, $this->config['schema']['type']);
|
|
}
|
public function schema():Schema|false
|
{
|
if (!isset($this->schema)) {
|
$this->initSchema();
|
}
|
return $this->schema??false;
|
}
|
public function meta():Meta
|
{
|
return $this->meta;
|
}
|
public function archive():Archive
|
{
|
return $this->archive;
|
}
|
|
public function getConfig():array
|
{
|
return $this->config;
|
}
|
}
|