Configurer le plugin
Configurer le pluginCréer des endpoints internes personnalisés pour les blocs

Créer des endpoints internes personnalisés pour les blocs

De façon similaire à l'endpoint interne blockEditor, les développeurs peuvent également créer leurs propres endpoints internes prédéfinis (pour alimenter en données leur application ou leurs blocs), afin d'appliquer une configuration spécifique :

  • Utiliser des mutations imbriquées ou non
  • Utiliser le namespacing ou non
  • Prédéfinir les CPTs pouvant être interrogés
  • Toute autre configuration disponible dans la Configuration du Schéma

Le code PHP suivant définit un endpoint interne personnalisé avec le nom accessMyPortfolioData, qui configure le champ Root.customPosts (du module "Custom Posts") pour n'accéder qu'au 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 [];
  }
}

Il doit être initialisé sur le 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();
});

Enfin, l'endpoint est accessible en remplaçant le paramètre endpoint_group par le nom choisi :

https://yoursite.com/wp-admin/edit.php?page=gatographql&action=run_query&endpoint_group=accessMyPortfolioData