プラグインの作成

私たちはすべての開発をWordPressプラグイン内で行います。まず、ローカルのWordPress環境にwp-content/plugins/my-first-gutenberg-appディレクトリを作成しましょう。そのディレクトリ内に4つのファイルを作成する必要があります:

  • my-first-gutenberg-app.php – 新しい管理ページを作成するため
  • src/index.js – JavaScriptアプリケーション用
  • style.css – 最小限のスタイルシート用
  • package.json – ビルドプロセス用

次のスニペットを使用してこれらのファイルを作成してください:

src/index.js:

  1. import { createRoot } from 'react-dom';
  2. function MyFirstApp() {
  3. return <span>Hello from JavaScript!</span>;
  4. }
  5. const root = createRoot( document.getElementById( 'my-first-gutenberg-app' ) );
  6. window.addEventListener(
  7. 'load',
  8. function () {
  9. root.render(
  10. <MyFirstApp />,
  11. );
  12. },
  13. false
  14. );

style.css:

  1. .toplevel_page_my-first-gutenberg-app #wpcontent {
  2. background: #fff;
  3. height: 1000px;
  4. }
  5. button .components-spinner {
  6. width: 15px;
  7. height: 15px;
  8. margin-top: 0;
  9. margin-bottom: 0;
  10. margin-left: 0;
  11. }
  12. .form-buttons {
  13. display: flex;
  14. }
  15. .my-gutenberg-form .form-buttons {
  16. margin-top: 20px;
  17. margin-left: 1px;
  18. }
  19. .form-error {
  20. color: #cc1818;
  21. }
  22. .form-buttons button {
  23. margin-right: 4px;
  24. }
  25. .form-buttons .components-spinner {
  26. margin-top: 0;
  27. }
  28. #my-first-gutenberg-app {
  29. max-width: 500px;
  30. }
  31. #my-first-gutenberg-app ul,
  32. #my-first-gutenberg-app ul li {
  33. list-style-type: disc;
  34. }
  35. #my-first-gutenberg-app ul {
  36. padding-left: 20px;
  37. }
  38. #my-first-gutenberg-app .components-search-control__input {
  39. height: 36px;
  40. margin-left: 0;
  41. }
  42. #my-first-gutenberg-app .list-controls {
  43. display: flex;
  44. width: 100%;
  45. }
  46. #my-first-gutenberg-app .list-controls .components-search-control {
  47. flex-grow: 1;
  48. margin-right: 8px;
  49. }

my-first-gutenberg-app.php:

  1. <?php
  2. /**
  3. * Plugin Name: My first Gutenberg App
  4. *
  5. */
  6. function my_admin_menu() {
  7. // Create a new admin page for our app.
  8. add_menu_page(
  9. __( 'My first Gutenberg app', 'gutenberg' ),
  10. __( 'My first Gutenberg app', 'gutenberg' ),
  11. 'manage_options',
  12. 'my-first-gutenberg-app',
  13. function () {
  14. echo '
  15. <h2>Pages</h2>
  16. <div id="my-first-gutenberg-app"></div>
  17. ';
  18. },
  19. 'dashicons-schedule',
  20. 3
  21. );
  22. }
  23. add_action( 'admin_menu', 'my_admin_menu' );
  24. function load_custom_wp_admin_scripts( $hook ) {
  25. // Load only on ?page=my-first-gutenberg-app.
  26. if ( 'toplevel_page_my-first-gutenberg-app' !== $hook ) {
  27. return;
  28. }
  29. // Load the required WordPress packages.
  30. // Automatically load imported dependencies and assets version.
  31. $asset_file = include plugin_dir_path( __FILE__ ) . 'build/index.asset.php';
  32. // Enqueue CSS dependencies.
  33. foreach ( $asset_file['dependencies'] as $style ) {
  34. wp_enqueue_style( $style );
  35. }
  36. // Load our app.js.
  37. wp_register_script(
  38. 'my-first-gutenberg-app',
  39. plugins_url( 'build/index.js', __FILE__ ),
  40. $asset_file['dependencies'],
  41. $asset_file['version']
  42. );
  43. wp_enqueue_script( 'my-first-gutenberg-app' );
  44. // Load our style.css.
  45. wp_register_style(
  46. 'my-first-gutenberg-app',
  47. plugins_url( 'style.css', __FILE__ ),
  48. array(),
  49. $asset_file['version']
  50. );
  51. wp_enqueue_style( 'my-first-gutenberg-app' );
  52. }
  53. add_action( 'admin_enqueue_scripts', 'load_custom_wp_admin_scripts' );

package.json:

  1. {
  2. "name": "09-code-data-basics-esnext",
  3. "version": "1.1.0",
  4. "private": true,
  5. "description": "My first Gutenberg App",
  6. "author": "The WordPress Contributors",
  7. "license": "GPL-2.0-or-later",
  8. "keywords": [
  9. "WordPress",
  10. "block"
  11. ],
  12. "homepage": "https://github.com/WordPress/gutenberg-examples/",
  13. "repository": "git+https://github.com/WordPress/gutenberg-examples.git",
  14. "bugs": {
  15. "url": "https://github.com/WordPress/gutenberg-examples/issues"
  16. },
  17. "main": "build/index.js",
  18. "devDependencies": {
  19. "@wordpress/scripts": "^24.0.0"
  20. },
  21. "scripts": {
  22. "build": "wp-scripts build",
  23. "format": "wp-scripts format",
  24. "lint:js": "wp-scripts lint-js",
  25. "packages-update": "wp-scripts packages-update",
  26. "start": "wp-scripts start"
  27. }
  28. }

ビルドパイプラインの設定

このチュートリアルは、読者がESNext構文とビルドツール(webpackなど)の概念に精通していることを前提に進めます。それが混乱を招く場合は、まずJavaScriptビルドセットアップの開始を確認してください。

ビルドツールをインストールするには、ターミナルを使用してプラグインディレクトリに移動し、npm installを実行します。

すべての依存関係が整ったら、残るのはnpm startを実行するだけです。すると、ターミナルでウォッチャーが実行されます。その後、テキストエディタで編集を行うことができ、各保存後に自動的にビルドされます。

動作確認

今、プラグインページに移動すると、My first Gutenberg Appというプラグインが表示されるはずです。これを有効化してください。My first Gutenberg appというラベルの新しいメニュー項目が表示されるはずです。それをクリックすると、Hello from JavaScript!と表示されるページが見えます:

セットアップ(Setup) - img1

おめでとうございます!これでアプリの構築を始める準備が整いました!

次は何ですか?