Ubuntu18.04のWordPressにReactアプリケーションを埋め込む方法

提供:Dev Guides
移動先:案内検索

著者は、 Electronic Frontier Foundation を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

WordPress は人気のあるコンテンツ管理システムであり、W3Techs(Web Technology Surveys)によると、インターネット上の33% of以上のWebサイトを強化しています。 非常に人気がある理由の1つは、明確でわかりやすいドキュメントを簡単に設定できることです。 さらに、WordPress開発者をサポートするコミュニティリソースがたくさんあります。 WordPressは、安価な、あるいは無料のすぐに使えるソリューションで多くのユースケースを解決できます。 最後に、WordPressには明確に定義されたプラグインシステムが付属しており、開発者はカスタムコードを記述して独自の機能を追加できます。 このプラグインシステムは十分に文書化されており、うまく機能します。このチュートリアルの後半で説明するように、使いやすいです。

最も豊かでインタラクティブな体験を提供したい開発者は、ReactなどのフレームワークでサポートされているJavaScriptを使用できます。 ReactはJavaScriptライブラリであり、開発者が一般的な静的ページやフォームを超えた動的でインタラクティブなUIを簡単に作成できるように設計されています。 Facebookによって作成され、セキュリティ、安定性、使いやすさのために十分に維持されているReactは、優れたドキュメントと、確立されたコミュニティ主導のドキュメントとプラグインのエコシステムを備えているため、人気があります。

このチュートリアルでは、WordPressサイトにReactアプリケーションを埋め込むためのベストプラクティスについて説明します。 その例では、一般的なユースケースを使用します。複数のページに、場合によっては1つのページに複数回埋め込むことを目的としたウィジェットを作成します。 サーバー側では、WordPressショートコードとして実装されます。 ショートコードはHTMLタグに似ていますが、山かっこ(<...>)の代わりに角かっこ([...])を使用します。 HTML要素を直接レンダリングする代わりに、PHP関数を呼び出します。この関数は、データベースからのデータで補間されたHTMLをレンダリングします。

このチュートリアルの終わりまでに、独自のショートコードを作成し、それをWP Adminのページに挿入して、そのページを公開します。 そのページでは、ブラウザによって表示されるReactウィジェットを見ることができます。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • Ubuntu 18.04チュートリアルを使用した初期サーバーセットアップでセットアップされたUbuntu18.04サーバーは、root権限を持つ新しいユーザーとともにサーバーのファイアウォールを構成します。
  • 完全に登録されたドメイン名。 このチュートリアルでは、全体を通して例としてyour_domainを使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。
  • 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このDigitalOceanDNSの紹介に従ってください。
    • サーバーのパブリックIPアドレスを指すyour_domainのAレコード。
    • サーバーのパブリックIPアドレスを指すwww.your_domainのAレコード。
  • サーバーへのApache、MySQL、およびPHPのインストール。 これは、 Linux、Apache、MySQL、PHP(LAMP)スタックをUbuntu18.04にインストールする方法に従って入手できます。
  • Ubuntu 18.04でLet'sEncryptを使用してApacheを保護する方法に従って、 Let'sEncryptを使用してApacheを保護して無料のSSL証明書を生成します。
  • WordPressのインストール。Ubuntu18.04にLAMPを使用してWordPressをインストールする方法とその前提条件に従って取得できます。
  • Ubuntu18.04にNode.jsをインストールする方法の「PPAを使用してインストールする」オプションに従ってNode.jsをインストールします。 このチュートリアルではバージョン11.15.0を使用するため、curlを使用してインストールスクリプトをダウンロードする場合は、10.x11.xに置き換えて、この手順に従ってください。チュートリアル。

ステップ1—ファイルシステムのアクセス許可の更新と構成

Ubuntu 18.04 の前提条件を使用した初期サーバーセットアップで作成された非rootユーザーとしてログインすると、WordPressディレクトリ内のファイルを表示または編集するためのアクセス権がなくなります。 後でファイルを追加および変更してWordPressプラグインとReactアプリケーションを作成するため、これは問題です。 この問題を修正するには、このステップでWordPress構成を更新して、WordPressファイルを編集できるようにします。

次のコマンドを実行します。ルート以外のユーザーの名前をsammyに、WordPressディレクトリ(前提条件で作成したApacheドキュメントのルートフォルダー)へのパスを/var/www/wordpressに置き換えます。

sudo chown -R sammy:www-data /var/www/wordpress

このコマンドを分解してみましょう:

  • sudosammyがアクセスできないファイルを変更しているため、このコマンドをrootとして実行できます。
  • chown —このコマンドはファイルの所有権を変更します。
  • -R —このフラグは、すべてのサブフォルダーとファイルを含め、所有権を再帰的に変更します。
  • sammy:www-data —これにより、所有者が非rootユーザー(sammy)として設定され、グループがwww-dataとして保持されるため、Apacheはファイルにアクセスしてサービスを提供できます。
  • /var/www/wordpress —これはWordPressディレクトリへのパスを指定します。 これは、所有権が変更されるディレクトリです。

このコマンドが成功したことを確認するには、WordPressディレクトリの内容を一覧表示します。

ls -la /var/www/wordpress

ディレクトリの内容のリストが表示されます。

Outputtotal 216
drwxr-x---  5 sammy www-data  4096 Apr 13 15:42 .
drwxr-xr-x  4 root  root      4096 Apr 13 15:39 ..
-rw-r-----  1 sammy www-data   235 Apr 13 15:54 .htaccess
-rw-r-----  1 sammy www-data   420 Nov 30  2017 index.php
-rw-r-----  1 sammy www-data 19935 Jan  1 20:37 license.txt
-rw-r-----  1 sammy www-data  7425 Jan  9 02:56 readme.html
-rw-r-----  1 sammy www-data  6919 Jan 12 06:41 wp-activate.php
drwxr-x---  9 sammy www-data  4096 Mar 13 00:18 wp-admin
-rw-r-----  1 sammy www-data   369 Nov 30  2017 wp-blog-header.php
-rw-r-----  1 sammy www-data  2283 Jan 21 01:34 wp-comments-post.php
-rw-r-----  1 sammy www-data  2898 Jan  8 04:30 wp-config-sample.php
-rw-r-----  1 sammy www-data  3214 Apr 13 15:42 wp-config.php
drwxr-x---  6 sammy www-data  4096 Apr 13 15:54 wp-content
-rw-r-----  1 sammy www-data  3847 Jan  9 08:37 wp-cron.php
drwxr-x--- 19 sammy www-data 12288 Mar 13 00:18 wp-includes
-rw-r-----  1 sammy www-data  2502 Jan 16 05:29 wp-links-opml.php
-rw-r-----  1 sammy www-data  3306 Nov 30  2017 wp-load.php
-rw-r-----  1 sammy www-data 38883 Jan 12 06:41 wp-login.php
-rw-r-----  1 sammy www-data  8403 Nov 30  2017 wp-mail.php
-rw-r-----  1 sammy www-data 17947 Jan 30 11:01 wp-settings.php
-rw-r-----  1 sammy www-data 31085 Jan 16 16:51 wp-signup.php
-rw-r-----  1 sammy www-data  4764 Nov 30  2017 wp-trackback.php
-rw-r-----  1 sammy www-data  3068 Aug 17  2018 xmlrpc.php

これらのファイルは、前提条件 Ubuntu18.04[X206XにLAMPを使用してWordPressをインストールする方法]でwordpress.orgからダウンロードしたlatest.tar.gzという名前のファイルのWordPressコアに含まれているファイルです。 ]。 前の出力のように権限が表示される場合、これはファイルとディレクトリが正しく更新されていることを意味します。

このステップでは、WordPressのインストールを更新して、ファイルを編集するためのアクセス権を自分に与えました。 次のステップでは、そのアクセスを使用して、WordPressプラグインを構成するファイルを作成します。

ステップ2—基本的なWordPressプラグインを作成する

WordPressディレクトリ内のファイルを変更するためのアクセス権ができたので、基本的なWordPressプラグインを作成し、それをインストールに追加します。 これにより、チュートリアルの後半でReactがWordPressと対話できるようになります。

WordPressプラグインは、次のように単純にすることができます。

  1. wp-content/plugins内のディレクトリ。
  2. 同じ名前で.phpファイル拡張子を持つそのディレクトリ内のファイル。
  3. WordPressに重要なプラグインメタデータを提供する、そのファイルの上部にある特別なコメント。

後で作成するReactコードのプラグインを作成するには、WordPressプラグインのディレクトリを作成することから始めます。 簡単にするために、このチュートリアルではプラグインにreact-wordpressという名前を付けます。 次のコマンドを実行し、wordpressをApacheドキュメントルートに置き換えます。

mkdir /var/www/wordpress/wp-content/plugins/react-wordpress

次に、新しく作成されたディレクトリに移動します。 以降のコマンドはここから実行されます。

cd /var/www/wordpress/wp-content/plugins/react-wordpress

プラグインファイルを作成しましょう。 このチュートリアルでは、コマンドnanoで呼び出されるnanoを、すべてのファイルのコマンドラインテキストエディターとして使用します。 PicoVimEmacs など、他の任意のテキストエディタを自由に使用することもできます。

react-wordpress.phpを開いて編集します。

nano react-wordpress.php

次の行をファイルに追加して、プラグインの開始を作成します。

/var/www/wordpress/wp-content/plugins/react-wordpress/react-wordpress.php

<?php
/**
 * @wordpress-plugin
 * Plugin Name:       Embedding React In Wordpress
 */

defined( 'ABSPATH' ) or die( 'Direct script access disallowed.' );

上部のコメント付きセクションはプラグインのメタデータを提供し、ABSPATH定数をチェックする行は、悪意のあるアクターがURLによってこのスクリプトに直接アクセスするのを防ぎます。 ABSPATHはWordPressルートディレクトリへの絶対パスであるため、ABSPATHが定義されている場合は、ファイルがWordPress環境を介してロードされたことを確認できます。

注:プラグインのメタデータコメントには多くのフィールドを使用できますが、必要なのはPlugin Nameのみです。 詳細については、WordPressドキュメントのヘッダー要件ページを参照してください。


次に、Webブラウザーを開き、ドメインのプラグインページ(https://your_domain/wp-admin/plugins.php)に移動します。 プラグインがWordPressのデフォルトプラグインと一緒に一覧表示されます。

アクティブ化をクリックしてプラグインを有効にします。

プラグインをアクティブ化すると、プラグインを含む行が青色で強調表示され、左側に青い境界線が表示されます。その下に Activate というリンクの代わりに、[ X217X]非アクティブ化:

次に、プラグインの構造を確立します。

端末に戻ってreact-wordpress.phpを開きます。

nano react-wordpress.php

次に、それを更新して、有用な定数を定義する次の強調表示された行を追加します。

/var/www/wordpress/wp-content/plugins/react-wordpress/react-wordpress.php

<?php
/**
 * @wordpress-plugin
 * Plugin Name:       Embedding React In Wordpress
 */

defined( 'ABSPATH' ) or die( 'Direct script access diallowed.' );

define( 'ERW_WIDGET_PATH', plugin_dir_path( __FILE__ ) . '/widget' );
define( 'ERW_ASSET_MANIFEST', ERW_WIDGET_PATH . '/build/asset-manifest.json' );
define( 'ERW_INCLUDES', plugin_dir_path( __FILE__ ) . '/includes' );

新しく追加された行で、次の3つの定数を定義しました。

  1. ERW_WIDGET_PATH —これはReactアプリケーションへのパスになります。
  2. ERW_ASSET_MANIFEST —これはReactアセットマニフェストへのパスです。これは、アプリケーションが機能するためにページに含める必要のあるJavaScriptファイルとCSSファイルのリストを含むファイルです。
  3. ERW_INCLUDES —このサブディレクトリには、すべてのPHPファイルが含まれます。

define()plugin_dir_path( __FILE__ )を参照していることに注意してください。 これは、そのファイルへのディレクトリパスを表します。

定数定義を追加したら、ファイルを保存してエディターを終了します。

注:定数を名前空間にすることが重要です。 この場合、名前空間ERW_を使用しています。これは、WordPressEmbeddingReactの略です。 この名前空間の前に変数を付けると、他のプラグインで定義されている定数と競合しないように、変数が一意になります。


他のPHPファイルを含むincludes/フォルダーを作成するには、プラグインディレクトリの最上位/var/www/your_domain/wp-content/plugins/react-wordpressから開始します。 次に、フォルダを作成します。

mkdir includes

WordPressプラグインを作成するために必要なPHP関連のファイルとフォルダーの足場を作成したので、Reactの初期ファイルとフォルダーを作成します。

ステップ3—Reactアプリケーションを初期化する

このステップでは、 Create React App を使用して、Reactアプリケーションを初期化します。

このチュートリアルは、CreateReactAppバージョン3.0.1を使用してテストされました。 バージョン3.0.0は、asset-manifest.jsonの構造に重大な変更を加えたため、この以前のバージョンは、変更しないとこのチュートリアルと互換性がありません。 ここで期待されるバージョンを使用していることを確認するには、次のコマンドを実行してCreateReactAppをインストールします。

sudo npm install --global [email protected]

このコマンドは、CreateReactAppのバージョン3.0.1をインストールします。 --globalフラグは、システム全体にインストールします。 システム全体にインストールすると、パスを指定せずにcreate-react-app(またはnpx create-react-app)を実行すると、インストールしたばかりのバージョンが使用されます。

Create React Appをインストールしたら、それを使用してReactアプリケーションを作成します。 このチュートリアルでは、アプリにwidgetという名前を付けます。

sudo create-react-app widget

このコマンドは、NPMに付属するバイナリであるnpxを使用します。 これは、NPMでホストされているCLIツールやその他の実行可能ファイルを簡単に使用できるように設計されています。 それらがローカルで見つからない場合は、それらのツールをインストールします。

create-react-appコマンドは、プロジェクトフォルダーと基本的なReactアプリに必要なすべてのファイルを生成します。 これには、JavaScript、CSS、およびテストファイルを開始するindex.htmlファイルと、プロジェクトと依存関係を定義するためのpackage.jsonが含まれます。 追加のビルドツールをインストールして構成しなくても、本番用にアプリケーションをビルドできる依存関係とスクリプトが事前に含まれています。

widgetアプリを設定すると、ターミナルの出力は次のようになります。

Output...
Success! Created widget at /var/www/wordpress/wp-content/plugins/react-wordpress/widget
Inside that directory, you can run several commands:

  npm start
    Starts the development server.

  npm run build
    Bundles the app into static files for production.

  npm test
    Starts the test runner.

  npm run eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd widget
  npm start

Happy hacking!

次に、新しく作成されたディレクトリに移動します。

cd widget

これで、デフォルトのビルドコマンドnpm run buildを使用してアプリケーションをビルドできるようになります。 このbuildコマンドは、buildという名前のスクリプトのキーscriptsの下にあるファイルpackage.jsonを調べます。

/var/www/wordpress/wp-content/plugins/react-wordpress/widget/package.json

{
  "name": "widget",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-scripts": "3.1.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

これは、create-react-appによって提供されるコアコンポーネントの1つであるreact-scriptsノードモジュールによって提供されるreact-scripts.js実行可能ファイルを呼び出します。 これにより、ビルドスクリプトが呼び出され、 webpack を使用して、プロジェクトファイルがブラウザが理解できる静的アセットファイルにコンパイルされます。 これは次の方法で行われます。

  • 依存関係の解決。
  • SASS ファイルをCSSおよびJSXにコンパイルするか、TypeScriptをJavaScriptにコンパイルします。
  • ES6構文をES5構文に変換し、ブラウザー間の互換性を向上させます。

buildについて少し理解できたので、ターミナルで次のコマンドを実行します。

sudo npm run build

コマンドが完了すると、次のような出力が表示されます。

Output> [email protected] build /var/www/wordpress/wp-content/plugins/react-wordpress/widget
> react-scripts build

Creating an optimized production build...
Compiled successfully.

File sizes after gzip:

  36.83 KB (+43 B)  build/static/js/2.6efc73d3.chunk.js
  762 B (+44 B)     build/static/js/runtime~main.a8a9905a.js
  710 B (+38 B)     build/static/js/main.2d1d08c1.chunk.js
  539 B (+44 B)     build/static/css/main.30ddb8d4.chunk.css

The project was built assuming it is hosted at the server root.
You can control this with the homepage field in your package.json.
For example, add this to build it for GitHub Pages:

  "homepage" : "http://myname.github.io/myapp",

The build folder is ready to be deployed.
You may serve it with a static server:

  npm install -g serve
  serve -s build

Find out more about deployment here:

  https://bit.ly/CRA-deploy

これでプロジェクトがビルドされましたが、次のステップに進む前に、アプリケーションが存在する場合にのみアプリケーションが読み込まれるようにすることをお勧めします。

Reactは、DOM内でアプリケーションをレンダリングするHTML要素を使用します。 これはtarget要素と呼ばれます。 デフォルトでは、この要素のIDはrootです。 このrootノードが作成中のアプリであることを確認するには、src/index.jsを変更して、名前の付いたerw-roottargetのIDを確認します。 これを行うには、最初にsrc/index.jsを開きます。

sudo nano src/index.js

強調表示された行を変更して追加します。

/var/www/wordpress/wp-content/plugins/react-wordpress/widget/src/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';

const target = document.getElementById('erw-root');
if (target) { ReactDOM.render(<App />, target); }

serviceWorker.unregister();

最後に、編集が完了したら、ファイルを保存して終了します。

このファイルでは、デフォルトのindex.jsファイルに2つの重要な変更を加えました。

  1. ターゲット要素を<div id="root"></div>から<div id="erw-root"></div>に変更したため、アプリケーションの名前が変更されます。
  2. ReactDOM.render()への呼び出しをif (...)ステートメントで囲み、アプリが存在する場合にのみロードされるようにしました。

注:ウィジェットがすべてのページに存在することを期待する場合は、エラー処理の行を追加することもできます。これにより、IDがerw-rootの要素の場合、コンソールにメッセージが出力されます。見つかりません。 ただし、このチュートリアルではこの手順を省略します。 このような行は、要素を含める予定のないページを含め、要素を含まないすべてのページでコンソールエラーを生成します。 これらの複数のJavaScriptコンソールエラーは、サイトの検索エンジンのランキングを下げるリスクがあります。


src/ディレクトリ内のJavaScriptまたはCSSファイルを変更した後、変更が組み込まれるようにアプリを再コンパイルすることが重要です。 アプリを再構築するには、次のコマンドを実行します。

sudo npm run build

これで、build/ディレクトリに、JavaScriptおよびCSSファイルの形式で動作するReactアプリケーションが含まれます。 次のステップでは、JavaScriptとCSSをページにエンキューするいくつかのPHPファイルを設定します。

ステップ4—JavaScriptファイルとCSSファイルをキューに入れる

このステップでは、WordPressのアクションとフィルターを使用して次のことを行います。

  1. WordPressページのロードサイクルの適切なタイミングでスクリプトエンキューコードを出力します。
  2. ページの読み込み速度への影響が最も少ない方法でJavaScriptファイルとCSSファイルをキューに入れます。

WordPressは、プライマリフックとしてアクションとフィルターを使用します。 アクションを使用すると、ページの読み込みサイクルの指定した時間にコードを実行できます。フィルターは、他の方法では所有していない関数の戻り値を変更することで、特定の動作を変更します。

これらのフックを使用するには、アセットマニフェストを解析するコードを含むPHPファイルを作成します。 これは、後ですべてのアセットをキューに入れるために使用するのと同じファイルであるため、スクリプトは<head>タグに書き込まれます。

ファイルを作成する前に、次のコマンドを使用して、Reactアプリを含むディレクトリから、トップレベルのreact-wordpressプラグインディレクトリに移動します。

cd /var/www/wordpress/wp-content/plugins/react-wordpress

includes/フォルダー内にenqueue.phpファイルを作成します。

nano includes/enqueue.php

ファイルの先頭に開始<?phpタグを配置することから始めます。 また、ABSPATHをチェックする行を追加します。これは、前に説明したように、すべてのPHPファイルのベストプラクティスです。

/var/www/wordpress/wp-content/plugins/react-wordpress/includes/enqueue.php

<?php
// This file enqueues scripts and styles

defined( 'ABSPATH' ) or die( 'Direct script access disallowed.' );

このファイルを保存して終了します。

次に、react-wordpress.phpを更新して、プロジェクトからenqueue.phpを要求します。 まず、編集用にファイルを開きます。

nano react-wordpress.php

次の強調表示された行を追加します。

/var/www/wordpress/wp-content/plugins/react-wordpress/react-wordpress.php

<?php
/**
 * @wordpress-plugin
 * Plugin Name:       Embedding React In Wordpress
 */

defined( 'ABSPATH' ) or die( 'Direct script access diallowed.' );

define( 'ERW_WIDGET_PATH', plugin_dir_path( __FILE__ ) . '/widget' );
define( 'ERW_ASSET_MANIFEST', ERW_WIDGET_PATH . '/build/asset-manifest.json' );
define( 'ERW_INCLUDES', plugin_dir_path( __FILE__ ) . '/includes' );

require_once( ERW_INCLUDES . '/enqueue.php' );

重要なタスクをチャンクに分割するために、includes/ディレクトリから他のPHPファイルを要求することはWordPressプラグインの一般的なパターンです。 require_once()関数は、引数として渡されたファイルの内容を、そのファイルのPHPコードがインラインで記述されているかのように解析します。 同様のコマンドincludeとは異なり、requireは、必要なファイルが見つからない場合に例外を発生させます。 require_once()を使用すると(require()だけではなく)、ディレクティブrequire_once( ERW_INCLUDES . '/enqueue.php' );が複数回指定された場合に、enqueue.phpが複数回解析されないようになります。

ファイルを保存して終了します。

includes/enqueue.phpを再度開きます。

nano includes/enqueue.php

次に、次の強調表示されたコードを追加します。

/var/www/wordpress/wp-content/plugins/react-wordpress/includes/enqueue.php

<?php
// This file enqueues scripts and styles

defined( 'ABSPATH' ) or die( 'Direct script access diallowed.' );

add_action( 'init', function() {

  add_filter( 'script_loader_tag', function( $tag, $handle ) {
    if ( ! preg_match( '/^erw-/', $handle ) ) { return $tag; }
    return str_replace( ' src', ' async defer src', $tag );
  }, 10, 2 );

  add_action( 'wp_enqueue_scripts', function() {

  });
});

initアクションに関数を追加すると、このコードは、テーマや他のプラグインが読み込まれた後の読み込みプロセスのinitフェーズで実行されます。

script_loader_tagフィルターを使用して<script>タグにasyncおよびdefer属性を設定すると、ブラウザーはDOMの構築とページレンダリングをブロックするのではなく、スクリプトを非同期でロードするようになります。 。

次に、wp_enqueue_scriptsアクションはフロントエンドアイテムをキューに入れます。 詳細については、このページを参照してください。

必ずファイルを書き込んで終了してください。

これで、WordPressにスクリプトとスタイルシートのタグをページに書き込むように指示しました。 この次のステップでは、アセットマニフェストと呼ばれるファイルを解析します。 これにより、エンキューする必要のあるすべてのファイルへのパスが提供されます。

ステップ5—アセットマニフェストの解析

このステップでは、Reactビルドによって生成されたアセットマニフェストを解析して、JavaScriptファイルとCSSファイルのリストにします。

アプリケーションをビルドすると、Reactビルドスクリプトがプロジェクトを複数のJavaScriptファイルとCSSファイルにビルドします。 ファイルの数と名前はビルドごとに異なります。各ビルドにはファイルの内容のハッシュが含まれているためです。 アセットマニフェストは、最後のビルドで生成された各ファイルの名前と、そのファイルへのパスを提供します。 プログラムで解析することにより、ページに書き込むスクリプトタグとスタイルシートタグは、名前が変更された場合でも、常に適切なファイルを指すことが保証されます。

まず、catコマンドを使用してasset-manifest.jsonを調べます。

cat widget/build/asset-manifest.json

次のようになります。

Output{
  "files": {
    "main.css": "/static/css/main.2cce8147.chunk.css",
    "main.js": "/static/js/main.a284ff71.chunk.js",
    "main.js.map": "/static/js/main.a284ff71.chunk.js.map",
    "runtime~main.js": "/static/js/runtime~main.fa565546.js",
    "runtime~main.js.map": "/static/js/runtime~main.fa565546.js.map",
    "static/js/2.9ca06fd6.chunk.js": "/static/js/2.9ca06fd6.chunk.js",
    "static/js/2.9ca06fd6.chunk.js.map": "/static/js/2.9ca06fd6.chunk.js.map",
    "index.html": "/index.html",
    "precache-manifest.e40c3c7a647ca45e36eb20f8e1a654ee.js": "/precache-manifest.e40c3c7a647ca45e36eb20f8e1a654ee.js",
    "service-worker.js": "/service-worker.js",
    "static/css/main.2cce8147.chunk.css.map": "/static/css/main.2cce8147.chunk.css.map",
    "static/media/logo.svg": "/static/media/logo.5d5d9eef.svg"
  }
}

それを解析するために、コードは.js.cssで終わるオブジェクトキーを探します。

enqueue.phpファイルを開きます。

nano includes/enqueue.php

ハイライトされたスニペットを追加します。

/var/www/wordpress/wp-content/plugins/react-wordpress/includes/enqueue.php

<?php
// This file enqueues scripts and styles

defined( 'ABSPATH' ) or die( 'Direct script access disallowed.' );

add_action( 'init', function() {

  add_filter( 'script_loader_tag', function( $tag, $handle ) {
    if ( ! preg_match( '/^erw-/', $handle ) ) { return $tag; }
    return str_replace( ' src', ' async defer src', $tag );
  }, 10, 2 );

  add_action( 'wp_enqueue_scripts', function() {

    $asset_manifest = json_decode( file_get_contents( ERW_ASSET_MANIFEST ), true )['files'];

    if ( isset( $asset_manifest[ 'main.css' ] ) ) {
      wp_enqueue_style( 'erw', get_site_url() . $asset_manifest[ 'main.css' ] );
    }

    wp_enqueue_script( 'erw-runtime', get_site_url() . $asset_manifest[ 'runtime~main.js' ], array(), null, true );

    wp_enqueue_script( 'erw-main', get_site_url() . $asset_manifest[ 'main.js' ], array('erw-runtime'), null, true );

    foreach ( $asset_manifest as $key => $value ) {
      if ( preg_match( '@static/js/(.*)\.chunk\.js@', $key, $matches ) ) {
        if ( $matches && is_array( $matches ) && count( $matches ) === 2 ) {
          $name = "erw-" . preg_replace( '/[^A-Za-z0-9_]/', '-', $matches[1] );
          wp_enqueue_script( $name, get_site_url() . $value, array( 'erw-main' ), null, true );
        }
      }

      if ( preg_match( '@static/css/(.*)\.chunk\.css@', $key, $matches ) ) {
        if ( $matches && is_array( $matches ) && count( $matches ) == 2 ) {
          $name = "erw-" . preg_replace( '/[^A-Za-z0-9_]/', '-', $matches[1] );
          wp_enqueue_style( $name, get_site_url() . $value, array( 'erw' ), null );
        }
      }
    }

  });
});

完了したら、ファイルを書き込んで終了します。

強調表示されたコードは次のことを行います。

  1. アセットマニフェストファイルを読み取り、JSONファイルとして解析します。 キー'files'に保存されているコンテンツにアクセスし、$asset_manifest変数に保存します。
  2. メインのCSSファイルが存在する場合はそれをエンキューします。
  3. 最初にReactランタイムをエンキューし、次にメインのJavaScriptファイルをキューに入れ、ランタイムを依存関係として設定して、最初にページにロードされるようにします。
  4. static/js/<hash>.chunk.jsという名前のJavaScriptファイルのアセットマニフェストファイルリストを解析し、メインファイルの後のページにエンキューします。
  5. static/css/<hash>.chunk.cssという名前のCSSファイルのアセットマニフェストファイルリストを解析し、メインのCSSファイルの後にページにエンキューします。

注: wp_enqueue_script()およびwp_enqueue_styleを使用すると、キューに入れられたファイルの<script>および<link>タグがすべてのページに表示されます。 最後の引数trueは、<head>要素の下部ではなく、ページコンテンツフッターの下にファイルを配置するようにWordPressに指示します。 これは、JavaScriptファイルのロードによってページの残りの部分が遅くならないようにするために重要です。


このステップでは、アプリで使用されるスクリプトとスタイルのファイルパスを分離しました。 次のステップでは、これらのファイルパスがReactアプリのbuildディレクトリを指していること、およびブラウザーからソースファイルにアクセスできないことを確認します。

ステップ6—静的ファイルの提供と保護

この時点で、ロードするJavaScriptファイルとCSSファイルとそれらを見つける場所をWordPressに指示しました。 ただし、ブラウザでhttps://your_domainにアクセスし、JavaScriptコンソールを見ると、HTTP404エラーが表示されます。 (JavaScriptコンソールの使用方法の詳細については、この記事を確認してください。)

これは、ファイルへのURLルート(/static/js/main.2d1d08c1.chunk.jsなど)がファイルへの実際のパス(/wp-content/plugins/react-wordpress/widget/build/static/js/main.2d1d08c1.chunk.jsなど)と一致しないためです。

このステップでは、ビルドディレクトリがどこにあるかをReactに伝えることで、この問題を修正します。 また、.htaccessファイルにApache書き換えルールを追加して、ソースファイルがブラウザーに表示されないように保護します。

Reactにアプリへの正しいパスを与えるには、Reactアプリケーションのディレクトリ内でpackage.jsonを開きます。

sudo nano widget/package.json

次に、強調表示されたhomepage行を追加します。

/var/www/wordpress/wp-content/plugins/react-wordpress/widget/package.json

{
  "name": "widget",
  "version": "0.1.0",
  "private": true,
  "homepage": "/wp-content/plugins/react-wordpress/widget/build",
  "dependencies": {
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-scripts": "3.1.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

ファイルを書き込んで終了します。 次に、Reactアプリケーションを再構築します。 widget/のトップレベルに移動します:

cd widget

次に、buildコマンドを実行します。

sudo npm run build

ビルドコマンドが完了したら、その内容をターミナルに出力して、アセットマニフェストを検査します。

cat build/asset-manifest.json

ファイルパスがすべて変更されていることがわかります。

/var/www/wordpress/wp-content/plugins/react-wordpress/widget/build/asset-manifest.json

{
  "files": {
    "main.css": "/wp-content/plugins/react-wordpress/widget/build/static/css/main.2cce8147.chunk.css",
    "main.js": "/wp-content/plugins/react-wordpress/widget/build/static/js/main.a28d856a.chunk.js",
    "main.js.map": "/wp-content/plugins/react-wordpress/widget/build/static/js/main.a28d856a.chunk.js.map",
    "runtime~main.js": "/wp-content/plugins/react-wordpress/widget/build/static/js/runtime~main.2df87c4b.js",
    "runtime~main.js.map": "/wp-content/plugins/react-wordpress/widget/build/static/js/runtime~main.2df87c4b.js.map",
    "static/js/2.9ca06fd6.chunk.js": "/wp-content/plugins/react-wordpress/widget/build/static/js/2.9ca06fd6.chunk.js",
    "static/js/2.9ca06fd6.chunk.js.map": "/wp-content/plugins/react-wordpress/widget/build/static/js/2.9ca06fd6.chunk.js.map",
    "index.html": "/wp-content/plugins/react-wordpress/widget/build/index.html",
    "precache-manifest.233e0a9875cf4d2df27d6280d12b780d.js": "/wp-content/plugins/react-wordpress/widget/build/precache-manifest.233e0a9875cf4d2df27d6280d12b780d.js",
    "service-worker.js": "/wp-content/plugins/react-wordpress/widget/build/service-worker.js",
    "static/css/main.2cce8147.chunk.css.map": "/wp-content/plugins/react-wordpress/widget/build/static/css/main.2cce8147.chunk.css.map",
    "static/media/logo.svg": "/wp-content/plugins/react-wordpress/widget/build/static/media/logo.5d5d9eef.svg"
  }
}

これにより、正しいファイルの場所がアプリに通知されますが、問題も発生します。アプリのsrcディレクトリへのパスが公開され、create-react-appに精通している人が[にアクセスする可能性があります。 X197X]そして、アプリのソースファイルの探索を開始します。 自分で試してみてください!

ユーザーにアクセスさせたくないパスを保護するには、WordPressの.htaccessファイルにApache書き換えルールを追加します。

nano /var/www/wordpress/.htaccess

ハイライトされた4行を追加します。

/var/www/wordpress/.htaccess

<IfModule mod_rewrite.c>
RewriteRule ^wp-content/plugins/react-wordpress/widget/(build|public)/(.*) - [L]
RewriteRule ^wp-content/plugins/react-wordpress/widget/* totally-bogus-erw.php [L]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

これは、wp-content/plugins/react-wordpress/widget/build/またはwp-content/react-wordpress/widget/public/のすべてへのブラウザー要求を許可するようにApacheに指示します。 それ以外はtotally-bogus-erw.phpにリダイレクトされます。 トップレベルにtotally-bogus-erw.phpという名前のファイルがない限り、このリクエストはWordPressによって処理され、404エラーが発生します。

Stream などのWordPressプラグインがあり、リクエストアクティビティを監視して404をログに記録します。 ログには、ユーザーが404を受信したときに要求されたIPアドレスとページが要求に表示されます。 totally-bogus-erw.phpを監視すると、特定のIPアドレスがReactアプリのsrcディレクトリをクロールしようとしているかどうかがわかります。

必ずファイルを書き込んで終了してください。

JavaScriptファイルとCSSファイルをページにロードするために必要なルーティングを確立したので、JavaScriptがアプリをレンダリングするために対話するページにHTML要素を追加するためにショートコードを使用する時が来ました。

ステップ7—ショートコードを作成する

ショートコードを使用すると、非常に単純なページ内構文を使用して、サーバー側のデータで補間された複雑なHTMLブロックを挿入できます。 このステップでは、WordPressショートコードを作成して登録し、それを使用してアプリケーションをページに埋め込みます。

プラグインのトップレベルに移動します。

cd /var/www/wordpress/wp-content/plugins/react-wordpress/

ショートコードを含む新しいPHPファイルを作成します。

touch includes/shortcode.php

次に、メインのPHPファイルを編集して、プラグインのロード時にincludes/shortcode.phpが必要になるようにします。 最初に開くreact-wordpress.php

nano react-wordpress.php

次に、次の強調表示された行を追加します。

/var/www/wordpress/wp-content/plugins/react-wordpress/react-wordpress.php

<?php
/**
 * @wordpress-plugin
 * Plugin Name:       Embedding React In Wordpress
 */

defined( 'ABSPATH' ) or die( 'Direct script access diallowed.' );

define( 'ERW_WIDGET_PATH', plugin_dir_path( __FILE__ ) . '/widget' );
define( 'ERW_ASSET_MANIFEST', ERW_WIDGET_PATH . '/build/asset-manifest.json' );
define( 'ERW_INCLUDES', plugin_dir_path( __FILE__ ) . '/includes' );

require_once( ERW_INCLUDES . '/enqueue.php' );
require_once( ERW_INCLUDES . '/shortcode.php' );

ファイルを書き込んで終了します。

次に、新しく作成したショートコードファイルを開きます。

nano includes/shortcode.php

次のコードを追加します。

/var/www/wordpress/wp-content/plugins/react-wordpress/includes/shortcode.php

<?php
// This file enqueues a shortcode.

defined( 'ABSPATH' ) or die( 'Direct script access disallowed.' );

add_shortcode( 'erw_widget', function( $atts ) {
  $default_atts = array();
  $args = shortcode_atts( $default_atts, $atts );

  return "<div id='erw-root'></div>";
});

このコードには主に定型文が含まれています。 erw_widgetという名前のショートコードを登録します。このショートコードは、呼び出されると、Reactアプリのルート要素である<div id="erw-root"></div>をページに出力します。

shortcode.phpを保存して終了します。

Reactアプリの動作を確認するには、新しいWordPressページを作成し、それにショートコードを追加する必要があります。

Webブラウザでhttps://your_domain/wp-adminに移動します。 ページの最上部に、左側にWordPressのロゴが付いた黒いバーが表示され、その後に家のアイコン、サイトの名前、コメントのバブルアイコンと番号、[X203X ]+新規。 + New ボタンにカーソルを合わせると、メニューがドロップダウンします。 ページというメニュー項目をクリックします。

画面が読み込まれると、タイトルの追加というテキストボックスにカーソルが移動します。 そこをクリックして入力を開始し、新しいページに関連するタイトルを付けます。 このチュートリアルでは、 My ReactAppを使用します。

WordPress Gutenbergエディターを使用しているとすると、ページ上部のタイトルの下に、書き込みを開始するか、/と入力してブロックを選択するというテキスト行が表示されます。 。 そのテキストにカーソルを合わせると、右側に3つの記号が表示されます。 [/]に似た最も近いものを選択して、ショートコードブロックを追加します。

新しく追加されたテキスト領域にショートコード[erw_widget]を入力します。 次に、ウィンドウの右上隅にある青い公開…ボタンをクリックし、公開を押して確認します。

ページが公開されたことを確認する緑色のバーが表示されます。 ページの表示リンクをクリックします。

画面にアプリが表示されます。

ページに基本的なReactアプリのレンダリングができたので、管理者がサーバー側で提供するオプションを使用してそのアプリをカスタマイズできます。

ステップ8—サーバー生成設定の挿入

このステップでは、サーバーで生成されたデータとユーザーが提供したデータの両方を使用して、アプリケーションに設定を挿入します。 これにより、アプリケーションで動的データを表示し、ページ内でウィジェットを複数回使用できるようになります。

まず、index.jsファイルを開きます。

sudo nano widget/src/index.js

次に、import App from './App';行を削除し、index.jsの内容を次の強調表示された行で更新します。

/var/www/wordpress/wp-content/plugins/react-wordpress/widget/src/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';

const App = () => (
  <div className="App">
    <span className="App__Message">Hello,<br />World!</span>
  </div>
);

const target = document.getElementById('erw-root');
if (target) { ReactDOM.render(<App />, target); }

serviceWorker.unregister();

これにより、Reactアプリケーションが変更され、デフォルトのCreate React App画面が返される代わりに、Hello, World!という要素が返されます。

ファイルを保存して終了します。 次に、index.cssを開いて編集します。

nano widget/src/index.css

index.cssの内容を次のコードに置き換えます。

/var/www/wordpress/wp-content/plugins/react-wordpress/widget/src/index.css

.App {
  width: 100px;
  height: 100px;
  border: 1px solid;
  display: inline-block;
  margin-right: 20px;
  position: relative;
}

.App .App__Message {
  font-size: 15px;
  line-height: 15px;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  text-align: center;
  width: 100%;
}

.Appのスタイルは、100ピクセルの正方形を塗りつぶした境界線でレンダリングし、.App__Messageのスタイルは、正方形の中央に垂直方向と水平方向の両方でテキストをレンダリングします。

ファイルを書き込んで終了し、アプリケーションを再構築します。

cd widget
sudo npm run build

ビルドが成功したら、ブラウザでhttps://your_domain/index.php/my-react-app/を更新します。 これで、CSSでスタイル設定したボックスとテキストHello, World!が表示されます。

次に、ユーザーが指定した境界線の色とサイズで構成されるカスタム設定を追加します。 また、サーバーから現在のユーザーの表示名を渡します。

引数を受け入れるためのショートコードの更新

ユーザー提供の引数を渡すには、最初にユーザーに引数を渡す方法を提供する必要があります。 ターミナルに戻り、プラグインのトップレベルに戻ります。

cd ..

次に、shortcode.phpファイルを開いて編集します。

nano includes/shortcode.php

ショートコードファイルを更新して、次の強調表示された行を含めます。

<?php
[label /var/www/wordpress/wp-content/plugins/react-wordpress/includes/shortcode.php]
// This file enqueues your shortcode.

defined( 'ABSPATH' ) or die( 'Direct script access disallowed.' );

add_shortcode( 'erw_widget', function( $atts ) {
  $default_atts = array( 'color' => 'black' );
  $args = shortcode_atts( $default_atts, $atts );

  return "<div class='erw-root'></div>";
});

ファイルを書き込んで終了します。 コードが'color' => 'black'$default_atts配列に追加する方法に注目してください。 配列キーcolorは、color属性が[erw_widget]ショートコードに渡される可能性があることを期待するようにWordPressに指示します。 配列値blackは、デフォルト値を設定します。 すべてのshortcode属性は文字列としてshortcode関数に渡されるため、デフォルト値を設定したくない場合は、代わりに空の文字列()を使用できます。 ページ内に複数の要素が存在することが予想されるため、最後の行はIDの代わりにクラスを使用するように変更されます。

次に、ブラウザに戻り、Hello, World!ボックスの下にある編集ボタンをクリックします。 ブラウザのWordPressページを更新して、ショートコードの2番目のインスタンスを追加し、両方のインスタンスに色属性を追加します。 このチュートリアルでは、[erw_widget color="#cf6f1a"][erw_widget color="#11757e"]を使用します。

青い更新ボタンをクリックして保存します。

注:2番目のウィジェットはまだ表示されません。 IDで識別される単一のインスタンスではなく、クラスで識別される複数のインスタンスを期待するようにReactアプリを更新する必要があります。


次に、index.jsを開いて編集します。

sudo nano widget/src/index.js

次のように更新します。

/var/www/wordpress/wp-content/plugins/react-wordpress/widget/src/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';

const App = () => (
  <div className="App">
    <span className="App__Message">Hello,<br />World!</span>
  </div>
);

const targets = document.querySelectorAll('.erw-root');
Array.prototype.forEach.call(targets, target => ReactDOM.render(<App />, target));

serviceWorker.unregister();

ファイルを書き込んで終了します。 更新された行は、クラスerw-rootの各インスタンスでReactアプリを呼び出します。 したがって、ショートコードを2回使用すると、ページに2つの正方形が表示されます。

最後に、index.cssを開いて編集します。

sudo nano widget/src/index.css

次の強調表示された行を含むようにファイルを更新します。

/var/www/wordpress/wp-content/plugins/react-wordpress/widget/src/index.css

.erw-root { display: inline-block; }

.App {
  width: 100px;
  height: 100px;
  border: 1px solid;
  display: inline-block;
  margin-right: 20px;
  position: relative;
}

.App .App__Message {
  font-size: 15px;
  line-height: 15px;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  text-align: center;
  width: 100%;
}

この追加された行により、複数の隣接するウィジェットが上下に並んで表示されるのではなく、並べて表示されます。

ファイルを保存して終了します。

次に、Reactアプリを再コンパイルします。

cd widget
sudo npm run build

ここで、ブラウザでページを更新すると、両方のウィジェットが表示されます。

ウィジェットにはまだ境界線の色が表示されないことに注意してください。 これについては、今後のセクションで説明します。

各ウィジェットインスタンスを一意に識別する

各ウィジェットを一意に識別するには、サーバーからIDを渡す必要があります。 これは、ルート要素のdata-id属性を介して実行できます。 ページ上の各ウィジェットの設定が異なる場合があるため、これは重要です。

これを行うには、最上位のプラグインディレクトリに戻り、shortcode.phpを開いて編集します。

cd ..
nano includes/shortcode.php

次の強調表示された行を持つように更新します。

/var/www/wordpress/wp-content/plugins/react-wordpress/includes/shortcode.php

<?php
// This file enqueues your shortcode.

defined( 'ABSPATH' ) or die( 'Direct script access disallowed.' );

add_shortcode( 'erw_widget', function( $atts ) {
  $default_atts = array( 'color' => 'black' );
  $args = shortcode_atts( $default_atts, $atts );
  $uniqid = uniqid('id');

  return "<div class='erw-root' data-id='{$uniqid}'></div>";
});

最初の新しい行は、プレフィックスidを持つ一意のIDを生成します。 更新された行は、data-id属性を使用してIDをReactルートに添付します。 これにより、ReactでIDにアクセスできるようになります。

ファイルを保存しますが、まだ終了しないでください。

JavaScriptwindowオブジェクトに設定を書き込みます

ショートコードファイルでは、ウィンドウグローバルJavaScriptオブジェクトのページに設定を書き込みます。 windowオブジェクトを使用すると、React内からアクセスできるようになります。

shortcode.phpを開いたまま、次のように更新します。

/var/www/wordpress/wp-content/plugins/react-wordpress/includes/shortcode.php

<?php
// This file enqueues your shortcode.

defined( 'ABSPATH' ) or die( 'Direct script access disallowed.' );

add_shortcode( 'erw_widget', function( $atts ) {
  $default_atts = array( 'color' => 'black' );
  $args = shortcode_atts( $default_atts, $atts );
  $uniqid = uniqid('id');

  global $current_user;
  $display_name = $current_user ? $current_user->display_name : 'World';

  ob_start(); ?>
  <script>
  window.erwSettings = window.erwSettings || {};
  window.erwSettings["<?= $uniqid ?>"] = {
    'color': '<?= $args["color"] ?>',
    'name': '<?= $display_name ?>',
  }
  </script>
  <div class="erw-root" data-id="<?= $uniqid ?>"></div>

  <?php
  return ob_get_clean();
});

これらの更新は、window-global設定オブジェクトを初期化し、WPAdminで提供されるデータを入力する各要素の前に<script>ブロックを書き込みます。

注:構文<?=は、<?php echoの省略形です。


ファイルを保存して終了します。

次に、WebブラウザでWordPressページを検査します。 これにより、ページのHTMLが表示されます。 CTRL+Fを検索してwindow.erwSettingsを検索すると、ページのHTMLに次のように設定が書き込まれていることがわかります。

...
  window.erwSettings = window.erwSettings || {};
  window.erwSettings["id5d5f1958aa5ae"] = {
    'color': '#cf6f1a',
    'name': 'sammy',
  }
...

Reactから設定を取得する

Reactアプリでは、IDに基づいて設定を取得し、境界線の色の値をプロパティ(prop)としてAppコンポーネントに渡します。 これにより、Appコンポーネントは、値がどこから来たのかを知る必要なしに値を使用できます。

index.jsを開いて編集します。

sudo nano widget/src/index.js

次の強調表示された行が含まれるように更新します。

/var/www/wordpress/wp-content/plugins/react-wordpress/widget/src/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';

const App = ({ settings }) => (
  <div className="App" style={{borderColor: settings.color}}>
    <span className="App__Message">Hello,<br />{settings.name}!</span>
  </div>
);

const targets = document.querySelectorAll('.erw-root');
Array.prototype.forEach.call(targets, target => {
  const id = target.dataset.id;
  const settings = window.erwSettings[id];
  ReactDOM.render(<App settings={settings} />, target)
});

serviceWorker.unregister();

ファイルを保存して、テキストエディタを終了します。

これで、Reactアプリはwindow-global window.erwSettingsオブジェクトからの一意のIDを使用して設定を取得し、それらをAppコンポーネントに渡します。 これを有効にするには、アプリケーションを再コンパイルします。

cd widget
sudo npm run build

この最後の手順を完了したら、ブラウザでWordPressページを更新します。 ユーザー提供の境界線の色とサーバー提供の表示名がウィジェットに表示されます。

結論

このチュートリアルでは、Reactアプリケーションを内部に持つ独自のWordPressプラグインを作成しました。 次に、アプリケーションをWP Adminページビルダー内に埋め込むことができるようにするためのブリッジとしてショートコードを作成し、最終的に、ページ上のウィジェットをカスタマイズしました。

これで、配信メカニズムがすでに整っているという自信を持って、Reactアプリケーションを拡張できます。 WordPressのこの基盤により、クライアント側のエクスペリエンスに集中でき、アプリケーションが拡張および成長するにつれて、WordPressのインストールで機能する本番指向のツールや手法を簡単に追加できます。

堅実なReact基盤で何ができるかについてさらに読むには、次のチュートリアルの1つを調べてみてください。