Poles Python Chops Anda dengan Menghubungkan Aplikasi Anda dengan WordPress
Diterbitkan: 2022-10-18WordPress telah menjadi sistem manajemen konten (CMS) yang paling banyak digunakan karena tidak sedikit dari antarmuka pemrograman aplikasi (API). WordPress REST API memungkinkan WordPress untuk “berbicara” dengan aplikasi lain yang ditulis dalam berbagai bahasa — termasuk Python.
Python adalah bahasa pemrograman yang dapat diperluas dengan beragam kegunaan dan sintaks yang dapat dibaca manusia, menjadikannya alat yang ampuh untuk mengelola konten WordPress dari jarak jauh.
Berikut adalah beberapa kasus penggunaan WordPress REST API untuk aplikasi Anda dan bagaimana Anda dapat menggunakan Python untuk mendukungnya:
- Gunakan template yang telah ditentukan sebelumnya untuk memungkinkan aplikasi Anda mengubah data mentah menjadi posting yang diformat dengan penjelasan dengan cepat.
- Bangun aplikasi back-office di Django dan Python yang menampilkan penawaran waktu terbatas kepada pelanggan Anda setiap kali terjadi diskon atau acara penjualan khusus objek.
- Integrasikan skrip Python untuk dijalankan di dalam situs WordPress Anda
Tutorial ini akan membantu Anda membuat aplikasi konsol Python sederhana yang berkomunikasi dengan dan menjalankan operasi pada REST API WordPress. Kode proyek lengkap juga tersedia.
Menginstal dan Mengonfigurasi WordPress
Pertama, mari instal dan jalankan situs WordPress secara lokal di mesin pengembangan Anda. Ini adalah cara terbaik untuk memulai dengan WordPress karena Anda tidak perlu membuat akun atau membeli nama domain untuk hosting web.
Sebelum menginstal WordPress secara lokal, beberapa komponen harus dijalankan di komputer Anda, termasuk server web Apache, database lokal, dan bahasa PHP yang digunakan untuk menulis WordPress.
Untungnya, kita dapat menggunakan DevKinsta, suite pengembangan WordPress lokal gratis yang tersedia untuk semua OS utama (Anda tidak harus menjadi pelanggan Kinsta untuk menggunakannya).
DevKinsta tersedia untuk Windows, Mac, dan Linux, dan menginstal WordPress plus semua dependensinya di mesin lokal Anda.
Sebelum menginstal DevKinsta, Anda harus menjalankan Docker secara lokal, jadi unduh dan instal Docker Engine jika belum.
Setelah menginstal Docker Desktop, Anda dapat secara otomatis mengunduh paket yang sesuai dengan OS Anda.
Saat Anda menjalankan pemasang DevKinsta, Docker segera memulai inisialisasi:
Selanjutnya, pilih situs WordPress Baru dari menu Buat Situs baru :
Sekarang penginstal DevKinsta mengharuskan Anda membuat kredensial untuk akun admin WordPress:
Setelah terinstal, DevKinsta adalah aplikasi mandiri. Sekarang Anda dapat mengakses situs WordPress (melalui tombol Buka Situs ) dan dasbor admin WordPress (tombol Admin WP ).
Selanjutnya, Anda perlu mengaktifkan SSL dan HTTPS untuk situs web Anda. Ini meningkatkan keamanan situs web Anda melalui sertifikat SSL.
Sekarang buka aplikasi DevKinsta dan klik tombol Buka situs . Tab browser baru akan menampilkan halaman beranda situs WordPress Anda:
Ini adalah blog WordPress Anda, tempat Anda dapat mulai menulis. Tetapi untuk mengaktifkan Python untuk mengakses dan menggunakan API REST WordPress, kita harus terlebih dahulu mengkonfigurasi Admin WordPress.
Sekarang klik tombol WP Admin pada aplikasi DevKinsta, lalu berikan pengguna dan kata sandi Anda untuk mengakses Dashboard WordPress :
Setelah Anda masuk, Anda akan melihat Dasbor WordPress :
WordPress menggunakan otentikasi cookie sebagai metode standarnya. Tetapi jika Anda ingin mengontrolnya menggunakan REST API, Anda harus mengotentikasi dengan teknik yang memberikan akses ke WordPress REST API.
Untuk ini, Anda akan menggunakan Kata Sandi Aplikasi. Ini adalah string panjang 24 karakter yang dihasilkan WordPress dan dikaitkan dengan profil pengguna yang memiliki izin untuk mengelola situs web Anda.
Untuk menggunakan Kata Sandi Aplikasi, klik menu Plugin di Dasbor, lalu cari plugin dengan nama yang sama. Kemudian instal dan aktifkan Plugin Kata Sandi Aplikasi:
Untuk mulai membuat kata sandi aplikasi Anda, mulailah dengan memperluas menu Pengguna dan mengklik Semua Pengguna :
Sekarang, klik Edit di bawah nama pengguna admin Anda:
Gulir ke bawah halaman Edit Pengguna dan temukan bagian Kata Sandi Aplikasi . Di sini, berikan nama untuk Kata Sandi Aplikasi, yang akan Anda gunakan nanti untuk mengautentikasi permintaan aplikasi Python dan menggunakan REST API:
Klik Tambahkan Kata Sandi Aplikasi Baru sehingga WordPress dapat membuat kata sandi 24 karakter acak untuk Anda:
Selanjutnya, salin kata sandi ini dan simpan di lokasi yang aman untuk digunakan nanti. Ingat, Anda tidak akan dapat mengambil kata sandi ini setelah Anda menutup halaman ini.
Terakhir, Anda harus mengonfigurasi tautan permanen. WordPress memungkinkan Anda membuat struktur URL khusus untuk permalink dan arsip Anda. Mari kita ubah sehingga posting WordPress berjudul, misalnya, "Situs Web WordPress Pertama Anda" dapat diakses melalui URL intuitif https://your-website.local:port/your-first-wordpress-website/. Pendekatan ini membawa beberapa manfaat, termasuk peningkatan kegunaan dan estetika.
Untuk mengonfigurasi permalink, perluas bagian Pengaturan dan klik menu Permalinks . Di sini, ubah Pengaturan Umum menjadi Nama posting :

Pengaturan struktur permalink menggunakan struktur nama Posting juga diperlukan karena akan memungkinkan kita untuk mengambil posting nanti dalam kode Python kita menggunakan format JSON. Jika tidak, kesalahan penguraian kode JSON akan terjadi.
Cara Mengontrol WordPress Dari Python
WordPress ditulis dalam PHP, tetapi memiliki REST API yang memungkinkan bahasa pemrograman, situs, dan aplikasi lain untuk menggunakan kontennya. Mengekspos konten WordPress dalam arsitektur REST membuatnya tersedia dalam format JSON. Oleh karena itu, layanan lain dapat berintegrasi dengan WordPress dan melakukan operasi buat, baca, perbarui, dan hapus (CRUD) tanpa memerlukan instalasi WordPress lokal.
Selanjutnya, Anda akan membuat aplikasi Python sederhana untuk melihat bagaimana Anda dapat menggunakan REST API WordPress untuk membuat, mengambil, memperbarui, dan menghapus postingan.
Buat direktori baru untuk proyek Python sederhana baru Anda dan beri nama seperti PythonWordPress
:
../PythonWordPress
Sekarang, Anda akan membuat lingkungan virtual untuk proyek Anda, memungkinkannya untuk memelihara satu set independen paket Python yang diinstal, mengisolasinya dari direktori sistem Anda dan menghindari konflik versi. Buat lingkungan virtual dengan menjalankan perintah venv
:
python3 -m venv .venv
Sekarang, jalankan perintah untuk mengaktifkan lingkungan virtual .venv . Perintah ini bervariasi menurut OS:
- Windows:
.venvScriptsactivate
- Mac/Linux:
.venv/bin/activate
Selanjutnya, simpan konfigurasi yang terkait dengan akun WordPress Anda. Untuk memisahkan konfigurasi aplikasi dari kode Python Anda, buat file .env di direktori proyek Anda, dan tambahkan variabel lingkungan ini ke file:
WEBSITE_URL="<>" API_USERNAME="<>" API_PASSWORD="<>"
Untungnya, membaca data di atas dari aplikasi Python itu mudah. Anda dapat menginstal paket Python-dotenv sehingga aplikasi Anda dapat membaca konfigurasi dari file .env :
pip install python-dotenv
Kemudian, instal aiohttp , klien/server HTTP asinkron untuk Python:
pip install aiohttp
Sekarang tambahkan file bernama app.py dengan kode berikut:
import asyncio menu_options = { 1: 'List Posts', 2: 'Retrieve a Post' } def print_menu(): for key in menu_options.keys(): print (key, '--', menu_options[key] ) async def main(): while(True): print_menu() option = input_number('Enter your choice: ') #Check what choice was entered and act accordingly if option == 1: print('Listing posts...') elif option == 2: print('Retrieving a post...') else: print('Invalid option. Please enter a number between 1 and 5.') def input_number(prompt): while True: try: value = int(input(prompt)) except ValueError: print('Wrong input. Please enter a number ...') continue if value < 0: print("Sorry, your response must not be negative.") else: break return value def input_text(prompt): while True: text = input(prompt) if len(text) == 0: print("Text is required.") continue else: break return text if __name__=='__main__': asyncio.run(main())
Kode di atas menampilkan menu konsol dan meminta Anda memasukkan nomor untuk memilih opsi. Selanjutnya, Anda akan memperluas proyek ini dan menerapkan kode yang memungkinkan Anda membuat daftar semua posting dan mengambil posting tertentu menggunakan id postingnya.

Mengambil Postingan dalam Kode
Untuk berinteraksi dengan WordPress REST API, Anda harus membuat file Python baru. Buat file bernama wordpress_api_helper.py dengan konten berikut:
import aiohttp import base64 import os import json from dotenv import load_dotenv load_dotenv() user=os.getenv("API_USERNAME") password=os.getenv("API_PASSWORD") async def get_all_posts(): async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session: async with session.get("/wp-json/wp/v2/posts") as response: print("Status:", response.status) text = await response.text() wp_posts = json.loads(text) sorted_wp_posts = sorted(wp_posts, key=lambda p: p['id']) print("=====================================") for wp_post in sorted_wp_posts: print("id:", wp_post['id']) print("title:", wp_post['title']['rendered']) print("=====================================") async def get_post(id): async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session: async with session.get(f"/wp-json/wp/v2/posts/{id}") as response: print("Status:", response.status) text = await response.text() wp_post = json.loads(text) print("=====================================") print("Post") print(" id:", wp_post['id']) print(" title:", wp_post['title']['rendered']) print(" content:", wp_post['content']['rendered']) print("=====================================")
Perhatikan penggunaan perpustakaan aiohttp di atas. Bahasa modern menyediakan sintaks dan alat yang memungkinkan pemrograman asinkron. Ini meningkatkan respons aplikasi dengan memungkinkan program melakukan tugas di samping operasi seperti permintaan web, operasi basis data, dan I/O disk. Python menawarkan asyncio sebagai dasar untuk kerangka pemrograman asinkronnya, dan pustaka aiohttp dibangun di atas asyncio untuk membawa akses asinkron ke operasi Klien/Server HTTP yang dibuat dengan Python.
Fungsi ClientSession
di atas berjalan secara asinkron dan mengembalikan objek session
, yang digunakan program kami untuk melakukan operasi GET HTTP terhadap titik akhir /wp-json/wp/v2/posts
. Satu-satunya perbedaan antara permintaan untuk mengambil semua posting dan permintaan untuk yang spesifik adalah bahwa permintaan terakhir ini melewati parameter post id
di rute URL: /wp-json/wp/v2/posts/{id}
.
Sekarang, buka file app.py dan tambahkan pernyataan import
:
from wordpress_api_helper import get_all_posts, get_post
Selanjutnya, ubah fungsi main
untuk memanggil fungsi get_all_posts
dan get_post
:
if option == 1: print('Listing posts...') await get_all_posts() elif option == 2: print('Retrieving a post...') id = input_number('Enter the post id: ') await get_post(id)
Kemudian jalankan aplikasi:
python app.py
Anda kemudian akan melihat menu aplikasi:
Sekarang coba opsi 1 untuk melihat daftar kiriman yang diambil oleh aplikasi Python Anda, dan opsi 2 untuk memilih kiriman:
Membuat Postingan dalam Kode
Untuk membuat posting WordPress dengan Python, mulailah dengan membuka file wordpress_api_helper.py dan tambahkan fungsi create_post
:
async def create_post(title, content): async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session: async with session.post( f"/wp-json/wp/v2/posts?content={content}&title={title}&status=publish" , auth=aiohttp.BasicAuth(user, password)) as response: print("Status:", response.status) text = await response.text() wp_post = json.loads(text) post_id = wp_post['id'] print(f'New post created with id: {post_id}')
Kode ini memanggil fungsi post
di objek session
, meneruskan parameter auth
di samping URL titik akhir REST API. Objek auth
sekarang berisi pengguna WordPress dan kata sandi yang Anda buat menggunakan Kata Sandi Aplikasi. Sekarang, buka file app.py dan tambahkan kode untuk mengimpor create_post
dan menu:
from wordpress_api_helper import get_all_posts, get_post, create_post menu_options = { 1: 'List Posts', 2: 'Retrieve a Post', 3: 'Create a Post' }
Kemudian tambahkan opsi menu ketiga:
elif option == 3: print('Creating a post...') title = input_text('Enter the post title: ') content = input_text('Enter the post content: ') await create_post(title, f"{content}")
Kemudian, jalankan aplikasi dan coba opsi 3, berikan judul dan konten untuk membuat posting baru di WordPress:
Memilih opsi 1 lagi akan mengembalikan id dan judul posting yang baru ditambahkan:
Anda juga dapat membuka situs WordPress Anda untuk melihat posting baru:
Memperbarui Posting dalam Kode
Buka file wordpress_api_helper.py dan tambahkan fungsi update_post
:
async def update_post(id, title, content): async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session: async with session.post( f"/wp-json/wp/v2/posts/{id}?content={content}&title={title}&status=publish" , auth=aiohttp.BasicAuth(user, password)) as response: print("Status:", response.status) text = await response.text() wp_post = json.loads(text) post_id = wp_post['id'] print(f'New post created with id: {post_id}')
Kemudian buka file app.py dan tambahkan kode untuk mengimpor update_post
dan menu:
from wordpress_api_helper import get_all_posts, get_post, create_post, update_post menu_options = { 1: 'List Posts', 2: 'Retrieve a Post', 3: 'Create a Post', 4: 'Update a Post' }
Kemudian, tambahkan opsi menu keempat:
elif option == 4: print('Updating a post...') id = input_number('Enter the post id: ') title = input_text('Enter the post title: ') content = input_text('Enter the post content: ') await update_post(id, title, f"{content}")
Kemudian jalankan aplikasi dan coba opsi 4, berikan id posting, judul, dan konten untuk memperbarui posting yang ada.
Memilih opsi 2 dan meneruskan id posting yang diperbarui akan mengembalikan detail posting yang baru ditambahkan:
Menghapus Posting dalam Kode
Anda dapat meneruskan id kiriman ke REST API untuk menghapus kiriman.
Buka file wordpress_api_helper.py dan tambahkan fungsi delete_post
:
async def delete_post(id): async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session: async with session.delete( f"/wp-json/wp/v2/posts/{id}" , auth=aiohttp.BasicAuth(user, password)) as response: print("Status:", response.status) text = await response.text() wp_post = json.loads(text) post_id = wp_post['id'] print(f'Post with id {post_id} deleted successfully.')
Sekarang buka file app.py dan tambahkan kode untuk mengimpor delete_post
dan menu:
from wordpress_api_helper import get_all_posts, get_post, create_post, update_post, delete_post menu_options = { 1: 'List Posts', 2: 'Retrieve a Post', 3: 'Create a Post', 4: 'Update a Post', 5: 'Delete a Post', }
Kemudian, tambahkan opsi menu kelima:
elif option == 5: print('Deleting a post...') id = input_number('Enter the post id: ') await delete_post(id)
Sekarang jalankan aplikasi dan coba opsi 5, berikan id untuk menghapus posting yang ada di WordPress:
Catatan: Postingan yang dihapus mungkin masih muncul jika Anda menjalankan opsi Daftar Postingan :
Untuk mengonfirmasi bahwa Anda telah menghapus postingan, tunggu beberapa detik dan coba lagi opsi Daftar Postingan . Dan itu saja!
Ringkasan
Berkat REST API WordPress dan pustaka klien HTTP Python, aplikasi Python dan WordPress dapat bekerja sama dan berbicara satu sama lain. Manfaat REST API adalah memungkinkan Anda untuk mengoperasikan WordPress dari jarak jauh dari aplikasi Python, di mana bahasa Python yang kuat memungkinkan pembuatan konten otomatis yang mengikuti struktur dan frekuensi yang Anda inginkan.
DevKinsta membuat pembuatan dan pengembangan situs WordPress lokal menjadi cepat dan mudah. Ini menyediakan lingkungan lokal untuk mengembangkan tema dan plugin WordPress dan menawarkan model penerapan yang disederhanakan berkat model instalasi mandiri berbasis Docker.
Apa pengalaman Anda bekerja dengan Python dan WordPress?
Saat siap untuk memperluas pengalaman itu, Anda dapat membaca Panduan Lengkap untuk Dasar-dasar API REST WordPress untuk menjelajahi kemungkinan lain.