概念、想法、策略
概念、想法、策略WordPress钩子与GraphQL指令的相似之处

WordPress钩子与GraphQL指令的相似之处

WordPress应用程序通过插件以及使用钩子(动作和过滤器)来修改某段代码的行为,从而实现高度可扩展性(无论是WordPress核心、主题还是插件中的代码)。钩子是简单的代码片段,每次触发时可以覆盖某个值或执行某个动作。

在以下示例中,过滤器 block_categories 用于修改WordPress编辑器中启用的区块分类:

\add_filter(
  'block_categories',
  function(array $categories): array
  {
    return [
      ...$categories,
      [
        'slug' => 'graphql-api-access-control',
        'title' => __('Access Control for GraphQL', 'graphql-api'),
      ],
    ];
  }
);

钩子简单、通用且强大;虽然可能被滥用,但只要实现得当,就能以开发者事先未曾规划的方式大幅扩展应用程序。

将GraphQL指令用作钩子

指令可以被视为GraphQL中等同于WordPress钩子的概念。

与WordPress钩子类似,指令是一个修改字段值的函数,从而扩展某些其他功能。与其对应物一样,它简单、通用且强大。

例如,假设我们用以下 query 获取一组文章标题:

query {
  posts {
    title
  }
}

这些结果是英文的。如何将它们翻译成法文?可以在字段 title 上应用指令 @strTranslate,该指令将字段的值作为输入,调用 Google Translate API 进行翻译,并返回结果,如以下 query 所示:

query {
  posts {
    title @strTranslate(from: "en", to: "fr")
  }
}

可扩展性的使用场景十分明确:给定字段 title 的某个值,我们可以通过指令以任何期望的方式对其进行修改。在本例中,修改方式是通过 @strTranslate 翻译成法文,但也可以是通过 @strUpperCase@strLowerCase 转换大小写,或进行其他任何处理。