Faust.js+WPGraphQLで、カスタムタクソノミーを扱う

39918 ワード

WPGraphQLプラグインとFaust.jsを組み合わせれば、クエリを書く手間を省きながら、WordPressをHeadless CMS化できます。しかしカスタムタクソノミーを使おうとすると少し手間がかかるので、手順をまとめました。

WordPress側

WPGraphQLの準備

Composer使うので環境用意して下さい。sage/bedrockがおすすめです。

composer require wp-graphql/wp-graphql
wp plugin activate wp-graphql

タクソノミーを作成し、GraphQLに露出

カスタムタクソノミー「ゲーム」を作るとします。

function custom_register_taxes_games() {
  $labels = [
    'name' => __( 'ゲーム' ),
    'singular_name' => __( 'ゲームズ' ),
  ];

  $args = [
    'label' => __( 'ゲーム' ),
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'hierarchical' => false,
    'show_ui' => true,
    'show_in_menu' => true,
    'show_in_nav_menus' => true,
    'query_var' => true,
    'rewrite' => [ 'slug' => 'games', 'with_front' => true, ],
    'show_admin_column' => true,
    'show_in_rest' => true,
    'show_tagcloud' => false,
    'rest_base' => 'games',
    'rest_controller_class' => 'WP_REST_Terms_Controller',
    'show_in_quick_edit' => true,
    'sort' => false,
    'show_in_graphql' => true,
    'graphql_single_name' => 'Game',
    'graphql_plural_name' => 'Games',
  ];
  register_taxonomy( 'games', [ 'post' ], $args );
}

add_action( 'init', 'custom_register_taxes_games' );

まあこれはCPTUIで追加してもいいのですが、いずれにせよ設定はコードに書いて下さい。(WordPress詳しくないからCPTUIで作ってコード生成させた。無駄なオプションが多いかも)

    'show_in_graphql' => true,
    'graphql_single_name' => 'Game',
    'graphql_plural_name' => 'Games',

重要なのはここで、これをGraphQL側で使います。

query game {
  game(id: "minecraft", idType: SLUG) {
    id
    name
  }
}

例えばminecraftというスラッグのゲームはこうやって取得できます。

タクソノミープラグインのインストールと有効化