Mengonfigurasi pluginMembuat Endpoint Internal Kustom untuk Blok
Membuat Endpoint Internal Kustom untuk Blok
Mirip dengan endpoint internal blockEditor, developer juga dapat membuat endpoint internal yang telah didefinisikan sendiri (untuk mengumpankan data ke aplikasi atau blok mereka), guna menerapkan konfigurasi tertentu:
- Menggunakan nested mutations atau tidak
- Menggunakan namespacing atau tidak
- Mendefinisikan terlebih dahulu CPT yang dapat di-query
- Konfigurasi lain apa pun yang tersedia di Schema Configuration
Kode PHP berikut mendefinisikan endpoint internal kustom dengan nama accessMyPortfolioData, yang mengonfigurasi field Root.customPosts (dari modul "Custom Posts") agar hanya mengakses 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 [];
}
}Endpoint ini harus diinisialisasi pada 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();
});Terakhir, endpoint diakses dengan mengganti parameter endpoint_group dengan nama yang dipilih:
https://yoursite.com/wp-admin/edit.php?page=gatographql&action=run_query&endpoint_group=accessMyPortfolioData