Configurare il pluginCreare endpoint interni personalizzati per i blocchi
Creare endpoint interni personalizzati per i blocchi
In modo simile all'endpoint interno blockEditor, gli sviluppatori possono anche creare i propri endpoint interni predefiniti (per alimentare con dati la loro applicazione o i loro blocchi), così da applicare una configurazione specifica:
- Usare le mutation annidate oppure no
- Usare il namespacing oppure no
- Predefinire i CPT che possono essere interrogati
- Qualsiasi altra configurazione disponibile nella Configurazione dello Schema
Il seguente codice PHP definisce un endpoint interno personalizzato con il nome accessMyPortfolioData, che configura il campo Root.customPosts (del modulo "Custom Posts") per accedere solo al 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 [];
}
}Deve essere inizializzato sull'hook plugins_loaded:
add_action('plugins_loaded', function () {
// Validate Gato GraphQL is installed, or exit
if (!class_exists(\GatoGraphQL\GatoGraphQL\Plugin::class)) {
return;
}
new MyPortfolioCustomAdminEndpointHook();
});Infine, si accede all'endpoint sostituendo il parametro endpoint_group con il nome scelto:
https://yoursite.com/wp-admin/edit.php?page=gatographql&action=run_query&endpoint_group=accessMyPortfolioData