*/ private array $importers = array(); private PostMetaRepositoryInterface $post_meta; private TermMetaRepositoryInterface $term_meta; public function __construct( PostMetaRepositoryInterface $post_meta, TermMetaRepositoryInterface $term_meta ) { $this->post_meta = $post_meta; $this->term_meta = $term_meta; } /** * @return SeoImporterInterface[] */ public function all(): array { if ( array() === $this->importers ) { $importers = array( new SlimSeoImporter( $this->post_meta, $this->term_meta ), new YoastImporter( $this->post_meta, $this->term_meta ), new AioseoImporter( $this->post_meta, $this->term_meta ), ); /** * Filters the list of available SEO data importers. * * @param SeoImporterInterface[] $importers */ $importers = (array) apply_filters( 'acez_seo_importers', $importers ); foreach ( $importers as $importer ) { if ( $importer instanceof SeoImporterInterface ) { $this->importers[ $importer->get_id() ] = $importer; } } } return $this->importers; } /** * @return SeoImporterInterface[] Only sources whose data is actually present. */ public function available(): array { return array_filter( $this->all(), static fn( SeoImporterInterface $importer ): bool => $importer->is_available() ); } public function get( string $importer_id ): ?SeoImporterInterface { return $this->all()[ $importer_id ] ?? null; } }