React JS สำหรับผู้ใช้ WordPress: บทนำเบื้องต้น
เผยแพร่แล้ว: 2018-10-19เป็นเวลากว่า 15 ปีแล้วที่ WordPress เป็นโซลูชัน CMS ที่ได้รับความนิยมและสมบูรณ์แบบที่สุด ที่ให้คุณสร้างอะไรก็ได้ตั้งแต่พอร์ตโฟลิโอหน้าเดียวไปจนถึงแพลตฟอร์มอีคอมเมิร์ซที่เต็มเปี่ยม WordPress ใช้ PHP สำหรับโครงสร้างพื้นฐานแบ็กเอนด์ทั้งหมด เช่น การอัปเดต, API, auth, DB layer และส่วนหน้าส่วนใหญ่ อย่างไรก็ตาม เช่นเดียวกับเฟรมเวิร์กยอดนิยมอื่นๆ WordPress ก็ถูกบังคับให้ต้องพัฒนาในช่วงไม่กี่ครั้งที่ผ่านมา
ด้วยศักยภาพและศักยภาพที่เพิ่มขึ้นของแอปพลิเคชัน JavaScript สำหรับเว็บ เช่นเดียวกับเดสก์ท็อปและแอปพลิเคชันมือถือแบบเนทีฟ WP REST API พยายามเชื่อมช่องว่างระหว่างแกน PHP ดั้งเดิมของ WordPress และการเพิ่มขึ้นของ JavaScript ฉันเชื่อว่านี่เป็นก้าวย่างที่ยิ่งใหญ่สำหรับ WordPress ด้วยเหตุผลสองประการ:
- เว็บไซต์ WP ที่มีอยู่สามารถใช้ React/Vue หรือไลบรารีส่วนหน้าอื่นเพื่อสร้างประสบการณ์ UI ที่ดีขึ้น
- ในทางกลับกัน นักพัฒนาเว็บจะได้รับ CMS ที่ไม่มีหัวตามมาตรฐานอุตสาหกรรม ซึ่งสามารถรวมเข้ากับสแต็กที่เลือกได้อย่างง่ายดาย
นั่นเป็นสถานการณ์ที่วิน-วินสำหรับทุกคน ในบทความนี้ เราจะเน้นไปที่การสร้างส่วนหน้า React สำหรับแบ็กเอนด์ WordPress แต่ก่อนอื่น มาดูที่ WordPress REST API
พื้นฐาน WordPress REST API
การพัฒนา WP REST API เริ่มขึ้นเมื่อไม่กี่ปีที่ผ่านมาและได้รับการออกแบบให้เป็นปลั๊กอินคุณลักษณะแบบสแตนด์อโลนในขั้นต้น WordPress v4.4 ซึ่งมีชื่อรหัสว่า 'Clifford' ได้แนะนำโครงสร้างพื้นฐานที่แท้จริงของ REST API ลงในแกนหลักของ WordPress จุดสิ้นสุดที่เกิดขึ้นจริงได้ปรากฏใน WordPress v4.7 ซึ่งมีชื่อรหัสว่า 'Vaughan' WP API ให้คุณใช้ WordPress เป็น CMS ที่ไม่มีส่วนหัว ใช้งานง่าย เสถียร และเป็นมิตรกับ JSON
JSON
JSON เป็นรูปแบบที่ต้องการหากคุณจะรวม WordPress กับ JavaScript stack JSON นั้นคล้ายกับ XML ซึ่งทำให้เราสามารถถ่ายโอนข้อมูลได้อย่างมีประสิทธิภาพโดยใช้รูปแบบที่อ่านง่าย
JSON เป็นสตริงที่ประกอบด้วยการแสดงข้อความของวัตถุ JavaScript โดยจะเก็บข้อมูลไว้ในชุดของคู่คีย์-ค่า ตัวอย่าง JSON อย่างง่ายของโพสต์ WP สามารถมีลักษณะดังนี้ -
{
id: 1,
"title": {
"rendered": "Hello World"
},
"content": {
"rendered": "Welcome to WordPress. This is your first
post. Edit or delete it, then start blogging!"
}
}
การตอบสนอง JSON ที่สมบูรณ์โดยใช้ WP REST API มักจะมีข้อมูลเพิ่มเติมเกี่ยวกับโพสต์ เช่น ข้อมูลเมตา คุณมีทุกสิ่งที่จำเป็นในการสร้างธีมส่วนหน้าหรือปลั๊กอินสำหรับแอปพลิเคชันของคุณ
จุดจบ
ปลายทาง WordPress สามารถเข้าถึงได้โดยสาธารณะ หากคุณกำลังใช้งาน WordPress เวอร์ชันล่าสุด คุณต้องเพิ่ม /wp-json/wp/v2 ต่อท้าย URL ตัวอย่างเช่น คุณสามารถเข้าถึงปลายทางพื้นฐานได้ที่ 127.0.0.1/wp-json/wp/v2 หากคุณได้ตั้งค่าอินสแตนซ์ WordPress ในโฮสต์ท้องถิ่นของคุณ หากคุณต้องการปรับแต่งผลลัพธ์ คุณสามารถใช้ส่วนขยายตัวแสดง JSON ที่ทำให้ JSON ดูสวยงามบนเบราว์เซอร์ของคุณ
ข้อมูลที่แสดงบนหน้าจอของคุณคือเนื้อหาและข้อมูลเมตาในรูปแบบ JSON สิ่งที่คุณทำที่นี่คือการกำหนดเส้นทางและขอให้เบราว์เซอร์ดึงข้อมูลให้คุณ
เราหมายถึงอะไรโดยเส้นทาง? เส้นทางคือ URL ที่แมปกับวิธีการเฉพาะ แกนหลักของ WordPress อ่านเส้นทางและเข้าใจว่าทุก '/' หมายถึงเส้นทางหรือพารามิเตอร์เฉพาะที่ต้องปฏิบัติตาม
ตัวอย่างเช่น จุดปลายอาจเป็น '/wp-json/wp/v2/posts/1' ซึ่งคุณขอโพสต์ที่มี id เทียบเท่า 1 WordPress APIs มีประโยชน์เนื่องจากค่อนข้างกว้างขวาง นี่แปลเป็นความสามารถในการนำข้อมูลใด ๆ จากเว็บไซต์ของคุณและเปลี่ยนเป็นปลายทาง รองรับฟังก์ชันการทำงานหลักเกือบทั้งหมดใน WordPress และคุณสมบัติที่จะเกิดขึ้นทั้งหมดจะได้รับการสนับสนุนด้วย นี่คือรายการของ WordPress APIs ที่ได้รับการสนับสนุนในขณะที่เขียนบทช่วยสอนนี้:
| ทรัพยากร | เส้นทางหลัก |
|---|---|
| กระทู้ | /wp/v2/posts |
| โพสต์การแก้ไข | /wp/v2/ฉบับแก้ไข |
| หมวดหมู่ | /wp/v2/หมวดหมู่ |
| แท็ก | /wp/v2/tags |
| หน้า | /wp/v2/pages |
| ความคิดเห็น | /wp/v2/ความคิดเห็น |
| อนุกรมวิธาน | /wp/v2/การจัดหมวดหมู่ |
| สื่อ | /wp/v2/media |
| ผู้ใช้ | /wp/v2/ผู้ใช้ |
| ประเภทโพสต์ | /wp/v2/types |
| สถานะโพสต์ | /wp/v2/สถานะ |
| การตั้งค่า | /wp/v2/settings |
นักพัฒนาธีม ตลอดจนนักพัฒนาปลั๊กอิน สามารถสร้างปลายทางที่กำหนดเองสำหรับแอปพลิเคชันของตนได้ หากคุณต้องการตรวจสอบปลายทางต่างๆ ทั้งหมดที่มี คุณสามารถดาวน์โหลดแอปพลิเคชัน เช่น บุรุษไปรษณีย์ ซึ่งจะให้ GUI ที่สร้างขึ้นเป็นพิเศษสำหรับการสำรวจ API ยิ่งไปกว่านั้น คุณสามารถเรียก API ไปยังแอพของบุคคลที่สามได้โดยตรงโดยไม่ต้องพึ่งปลั๊กอิน
ลองมาดูตัวอย่างกัน การอัปโหลดไฟล์และการดูแลรักษาหลายเวอร์ชันเป็นข้อกำหนดที่สำคัญสำหรับเว็บแอปพลิเคชันสมัยใหม่ โดยเฉพาะอย่างยิ่งในกรณีของไฟล์มีเดีย ใน WordPress มีปลั๊กอินมากมายที่สามารถทำสิ่งนี้ให้คุณได้ อย่างไรก็ตาม คุณอาจต้องโทรไปยังเซิร์ฟเวอร์ WordPress เพื่อใช้งาน
ด้วย WP API ตรรกะการจัดการสื่อสามารถแยกออกจาก WordPress ได้ คุณสามารถทำการเรียก API บุคคลที่สามทั้งหมดได้โดยตรงจากส่วนหน้า ซึ่งดีมากในแง่ของการแยกข้อกังวล คุณสามารถใช้ไลบรารีเช่น Cloudinary เพื่อจัดการรูปภาพและไฟล์สื่ออื่น ๆ ได้ทันที แล้วอัปโหลดไปยังคลาวด์ เมื่ออัปโหลดแล้ว URL ของรูปภาพสามารถเก็บไว้ในแบ็กเอนด์ WP ได้ ตัวเลือกไม่มีที่สิ้นสุดและคุณสามารถรวมชิ้นส่วนต่างๆ เข้าด้วยกันตามที่เห็นสมควร
ตอนนี้เรามาดูวิธีเชื่อมต่อแบ็กเอนด์ WordPress กับ React กัน
เริ่มต้นใช้งาน React
React เป็นไลบรารีส่วนหน้าสำหรับการสร้างส่วนต่อประสานผู้ใช้และแอปพลิเคชันแบบโต้ตอบบนเว็บ ด้วย React คุณสามารถเขียนโค้ดที่นำกลับมาใช้ใหม่ได้อิสระซึ่งเรียกว่าส่วนประกอบ มาสร้างองค์ประกอบแรกของเราด้วยการสร้างโครงการ React
วิธีที่นิยมมากที่สุดในการสร้างโครงการ React คือการเรียกใช้ create-react-app CRA นำเสนอสภาพแวดล้อมที่สะดวกสบายสำหรับการเรียนรู้ React และเป็นวิธีที่ดีที่สุดในการเริ่มสร้างแอปพลิเคชันหน้าเดียวใหม่หากคุณเป็นมือใหม่ มันตั้งค่าสภาพแวดล้อมการพัฒนาของคุณเพื่อให้คุณสามารถใช้คุณสมบัติ JavaScript ล่าสุด เช่น ES6 และ webpack นอกจากนี้ create-react-app ยังมอบประสบการณ์ที่ดีสำหรับนักพัฒนาและเพิ่มประสิทธิภาพแอปของคุณสำหรับการผลิต

คุณจะต้องมี Node >= 8.x และ npm >= 5.2 บนเครื่องของคุณ ในการสร้างโปรเจ็กต์ ให้รันคำสั่งต่อไปนี้:
npx create-react-app wp-react-demo
คำสั่งด้านบนสร้างเทมเพลตสำเร็จรูปสำหรับแอปพลิเคชัน react ซึ่งเราตั้งชื่อว่า wp-react-demo
cd wp-react-demo
npm start
หากทุกอย่างเป็นไปด้วยดี ก็ควรจะสามารถให้บริการแอปพลิเคชันที่สร้างขึ้นใหม่บนเซิร์ฟเวอร์การพัฒนาที่ http://localhost:3000/
หากคุณอยากรู้ว่าโครงสร้างไดเร็กทอรีที่สร้างโดย create-react-app จะมีลักษณะดังนี้:
.
├── README.md
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── manifest.json
├── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ └── registerServiceWorker.js
└── yarn.lock
ไดเร็กทอรีสาธารณะมีเนื้อหาทั้งหมดที่จำเป็นสำหรับการเริ่มต้นแอปพลิเคชัน ไดเร็กทอรี src ประกอบด้วยไฟล์ JavaScript ทั้งหมดที่เราจะดำเนินการและคุณจะใช้เวลาส่วนใหญ่ที่นั่น
เมื่อคุณไปที่ localhost:3000 ไฟล์ index.html จะถูกโหลด หากคุณเปิดไฟล์ public/index.html ก็ไม่มีอะไรมาก แต่คุณจะพบบรรทัดนี้อยู่ตรงกลาง:
<div id="root"></div>
นั่นคือจุดเริ่มต้นที่ React แสดงโครงสร้างส่วนประกอบในรูทของแอปพลิเคชัน
นั่นหมายความว่าอย่างไร? ตรงไปที่ไดเร็กทอรี src และเปิดขึ้น index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
React พยายามค้นหาองค์ประกอบที่มี id “root” ในเอกสารแล้วฉีด
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class App extends Component {
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
);
}
}
export default App;
นี่คือสิ่งที่ส่วนประกอบดูเหมือน แต่ละองค์ประกอบแสดงผลเป็นส่วนหนึ่งของ UI ของคุณ คุณสามารถเขียนองค์ประกอบหนึ่งภายในองค์ประกอบอื่นได้ และนั่นคือวิธีที่คุณจะได้โครงสร้างแผนผังองค์ประกอบเช่นนี้:

หากคุณสงสัยว่าเหตุใดเราจึงสามารถใช้ HTML ในการแสดงผล () ได้ นั่นคือความมหัศจรรย์ของ JSX JSX เป็นส่วนขยายไวยากรณ์ของ JavaScript และให้คุณใช้ HTML ธรรมดาในไฟล์ JavaScript คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในเอกสารอย่างเป็นทางการ
ฉันจะลบเนื้อหา HTML ทั้งหมดแล้วแทนที่ด้วย a
<div> <h2> WordPress Blog </h2> </div>
ส่วนประกอบที่ทำปฏิกิริยาและสถานะ
ส่วนประกอบคือหน่วยการสร้างใน React แต่ละองค์ประกอบสามารถมี
- อินพุต (หรืออินพุตหลายรายการ) ที่รู้จักกันทั่วไปว่าเป็นอุปกรณ์ประกอบฉาก
- สถานะที่เป็นท้องถิ่นของส่วนประกอบ
- เมธอดที่แสดงผลบางอย่าง (เช่น: render()) หรือจัดการตรรกะทางธุรกิจบางอย่าง
เราจะสร้างองค์ประกอบที่จะดึงข้อมูลโพสต์ที่มีอยู่ทั้งหมดและแสดงกลับไปยังผู้ใช้ ในการทำเช่นนั้น ก่อนอื่นเราจะเขียนตัวสร้างสำหรับคลาสและเริ่มต้นสถานะในตัวสร้าง:
constructor (props){
super(props);
this.state = {
title: {},
date: "",
content: {}
};
}
สถานะเป็นวัตถุ JSON เราได้ประกาศคุณสมบัติ ชื่อ วันที่ และเนื้อหา ภายในตัวสร้างแล้ว ชื่อเรื่องและเนื้อหาเป็นวัตถุในขณะที่วันที่เป็นอาร์เรย์
การดึงข้อมูลและการอัปเดตสถานะ
ตอนนี้ เมื่อส่วนประกอบติดตั้ง จะต้องดึงข้อมูลโพสต์จาก API และเก็บไว้ในสถานะ ข้อมูลโพสต์มีอยู่ใน URL ต่อไปนี้:
http://localhost/wp-json/wp/v2/posts/
แล้วเราจะเอาตรรกะนี้ไปไว้ที่ไหน? คอนสตรัคเตอร์อาจฟังดูเป็นตัวเลือกที่ดี เพราะมันจะถูกเรียกใช้เมื่อคอมโพเนนต์ถูกสร้างขึ้น แต่ไม่ใช่ตัวเลือกที่ดีที่สุด เราจะใช้สิ่งที่เรียกว่าวิธีวงจรชีวิตแทน วิธีการวงจรชีวิต componentDidMount() ถูกเรียกหลังจากติดตั้งส่วนประกอบแล้ว
componentDidMount() {
return fetch(`http://wordpress.com/wp-json/wp/v2/posts/`)
.then((response) => response.json())
.then((responseJson) => {
// Update state here
})
.catch((error) => {
console.error(error);
});
}
เรากำลังใช้การดึงข้อมูลซึ่งเป็นมาตรฐานโดยพฤตินัยใน JavaScript สำหรับการเรียก API พารามิเตอร์ที่จะดึงข้อมูล () คือ URL ที่เราต้องการดึงข้อมูล Fetch ส่งคืน Promise ซึ่งเราสามารถประเมินโดยห่วงโซ่ของ .then()s บล็อกแรกจะแปลงการตอบสนองเป็นรูปแบบ json เพื่อให้เราสามารถวางไว้ในสถานะได้
const { title, date, content } = responseJson;
this.setState({ title, date, content });
แล้วจะเกิดอะไรขึ้นที่นี่? ขั้นแรก เราแยกฟิลด์ชื่อ วันที่ และเนื้อหาออกจากอ็อบเจ็กต์ responseJson ไวยากรณ์แปลกๆ ที่คุณเห็นในที่นี้เรียกว่า การทำลายโครงสร้างไวยากรณ์การกำหนด อย่างที่คุณอาจทราบแล้ว WP API จะส่งคืนข้อมูลจำนวนมากที่เราไม่ต้องการ ไวยากรณ์การกำหนดโครงสร้างที่ทำให้สามารถแยกค่าออกจากวัตถุเป็นตัวแปรที่แตกต่างกันได้
ต่อไป เราใช้ this.setState() เพื่ออัปเดตสถานะของส่วนประกอบ เมธอด setState() ยอมรับอ็อบเจ็กต์เป็นพารามิเตอร์ซึ่งจะเป็นสถานะที่อัปเดต
การแสดงผลโพสต์ WordPress ของเรา
วิธีการเรนเดอร์ส่งคืน JSX ที่เรากล่าวถึงก่อนหน้านี้ ต่างจาก HTML ล้วนๆ คุณสามารถฝังนิพจน์ลงใน JSX ได้ ตัวอย่างเช่น หากคุณต้องการแสดงชื่อของโพสต์ที่ดึงมาและไม่ต้องการแสดงอย่างอื่น คุณสามารถทำได้:
render() {
return (
<div>
{this.state.title.rendered}
</div>
);
}
}
ลองมัน!
ในทำนองเดียวกัน คุณสามารถแสดงวันที่โดยฝัง {this.state.date} อย่างไรก็ตาม เนื้อหาที่เก็บไว้ในสถานะประกอบด้วย HTML จริง เนื่องจาก HTML ถูกส่งคืนจากเซิร์ฟเวอร์ ถือว่าปลอดภัยที่จะแสดงผล ดังนั้น ในการแสดงเนื้อหา คุณจะต้องมีแอตทริบิวต์อันตราย SetInnerHTML ดังนี้:
<div
className= "content"
dangerouslySetInnerHTML={{ __html: this.state.content.rendered }}>
</div>
นี่คือเมธอด render() ในการดำเนินการ
render() {
return (
<div>
<div>
<div className="row">
<div className="leftcolumn">
<div className="card">
<div className= "title">
<h1>{this.state.title.rendered}</h1>
<p> {this.state.date} </p>
</div>
<div
className= "content"
dangerouslySetInnerHTML={{ __html: this.state.content.rendered }} />
</div>
</div>
</div>
</div>
</div>
);
}
}
ฉันได้เพิ่มแท็กและคลาสเพิ่มเติมสำหรับการจัดแต่งทรงผม คุณสามารถเขียนสไตล์ทั้งหมดของคุณในไฟล์ในไดเร็กทอรี src และนำเข้าไปยัง App.js ของคุณ คุณสามารถค้นหาสไตล์สำหรับโครงการนี้ได้ที่ src/App.css อย่าลืมเพิ่มคำสั่งนำเข้า มิฉะนั้น สไตล์จะไม่ทำงาน
import './App.css';
แค่นั้นแหละ. คุณได้สร้างส่วนหน้าพื้นฐานสำหรับแบ็กเอนด์ WordPress API โดยใช้ React นี่คือลักษณะของโพสต์ Hello World เริ่มต้นในแอปพลิเคชันของเรา:

สรุป
วุ้ย นั่นเป็นจำนวนมากที่ครอบคลุมในหนึ่งวัน เราเริ่มต้นด้วย WordPress Rest API และทำความคุ้นเคยกับปลายทาง API จากนั้นเราก็เริ่มสร้างแอปพลิเคชัน React ตั้งแต่เริ่มต้นซึ่งโดยทั่วไปจะแสดงโพสต์ WordPress
การใช้ React กับ WordPress นั้นเหมือนกับการใช้ React กับ backend API อื่นๆ ด้วย WordPress การค้นหาข้อมูลจะง่ายขึ้น และคุณรู้ดีว่าต้องดูที่ใด หากคุณเพิ่งเริ่มสำรวจ React ฉันขอแนะนำ React docs เป็นสถานที่ที่ดีในการเริ่มต้น หากคุณมีคำถามใด ๆ อย่าลังเลที่จะถามในความคิดเห็น
