Konfiguracja wtyczkiTworzenie niestandardowych wewnętrznych endpointów dla bloków
Tworzenie niestandardowych wewnętrznych endpointów dla bloków
Podobnie jak wewnętrzny endpoint blockEditor, deweloperzy mogą również tworzyć własne wstępnie zdefiniowane wewnętrzne endpointy (do dostarczania danych do aplikacji lub bloków), aby zastosować określoną konfigurację:
- Używanie zagnieżdżonych mutacji lub nie
- Używanie przestrzeni nazw (namespacing) lub nie
- Wstępne definiowanie CPT, które mogą być odpytywane
- Dowolna inna konfiguracja dostępna w konfiguracji schematu
Poniższy kod PHP definiuje niestandardowy wewnętrzny endpoint o nazwie accessMyPortfolioData, który konfiguruje pole Root.customPosts (z modułu "Custom Posts") tak, aby uzyskiwał dostęp wyłącznie do CPT MyPortfolio:
<?php
declare(strict_types=1);
use GatoGraphQL\GatoGraphQL\PluginSkeleton\ExtensionHooks\AbstractAddCustomAdminEndpointHook;
use PoP\Root\Module\ModuleInterface;
use PoPCMSSchema\CustomPosts\Environment as CustomPostsEnvironment;
use PoPCMSSchema\CustomPosts\Module as CustomPostsModule;
class MyPortfolioCustomAdminEndpointHook extends AbstractAddCustomAdminEndpointHook
{
protected function getAdminEndpointGroup(): string
{
return 'accessMyPortfolioData';
}
/**
* Allow querying a specific CPT
*
* @param array<class-string<ModuleInterface>,array<string,mixed>> $moduleClassConfiguration [key]: Module class, [value]: Configuration
* @return array<class-string<ModuleInterface>,array<string,mixed>> [key]: Module class, [value]: Configuration
*/
protected function doGetPredefinedAdminEndpointModuleClassConfiguration(
array $moduleClassConfiguration,
): array {
$moduleClassConfiguration[CustomPostsModule::class][CustomPostsEnvironment::QUERYABLE_CUSTOMPOST_TYPES] = ['MyPortfolio'];
return $moduleClassConfiguration;
}
/**
* Do not disable any schema modules
*
* @param array<class-string<ModuleInterface>> $schemaModuleClassesToSkip List of `Module` class which must not initialize their Schema services
* @return array<class-string<ModuleInterface>> List of `Module` class which must not initialize their Schema services
*/
protected function doGetSchemaModuleClassesToSkip(
array $schemaModuleClassesToSkip,
): array {
return [];
}
}Musi być zainicjowany w hooku plugins_loaded:
add_action('plugins_loaded', function () {
// Validate Gato GraphQL is installed, or exit
if (!class_exists(\GatoGraphQL\GatoGraphQL\Plugin::class)) {
return;
}
new MyPortfolioCustomAdminEndpointHook();
});Na koniec dostęp do endpointu uzyskuje się przez zastąpienie parametru endpoint_group wybraną nazwą:
https://yoursite.com/wp-admin/edit.php?page=gatographql&action=run_query&endpoint_group=accessMyPortfolioData