مواقع

صقل مقاطع Python الخاصة بك عن طريق ربط تطبيقك بـ WordPress

أصبح WordPress أكثر أنظمة إدارة المحتوى استخدامًا (CMS) نظرًا لواجهة برمجة التطبيقات (API). تعمل واجهة برمجة تطبيقات WordPress REST على تمكين WordPress من “التحدث” مع التطبيقات الأخرى المكتوبة بلغات مختلفة – بما في ذلك Python.

Python هي لغة برمجة قابلة للتوسيع ذات استخدامات متنوعة وبناء جملة يمكن قراءته من قبل الإنسان ، مما يجعلها أداة قوية لإدارة محتوى WordPress عن بُعد.

Here are some WordPress REST API use cases for your apps and كيفية تحميل الملفات إلى ووردبريس (مع الإضافات وبدونها)
how you can use Python to support them:

  • استخدم القوالب المحددة مسبقًا لتمكين تطبيقك من تحويل البيانات الأولية إلى منشورات منسقة مع التفسيرات بسرعة.
  • أنشئ تطبيقًا للمكتب الخلفي على Django و Python يعرض عروضًا محدودة الوقت لعملائك في كل مرة يحدث فيها خصم خاص بالعنصر أو حدث مبيعات.
  • ادمج نصوص Python ليتم تشغيلها داخل موقع WordPress الخاص بك

سيساعدك هذا البرنامج التعليمي في إنشاء تطبيق بسيط لوحدة تحكم Python يتواصل مع وتنفيذ العمليات على WordPress REST API. كود المشروع الكامل متاح أيضا.

 

تثبيت وتكوين ووردبريس

أولاً ، دعنا نثبت ونشغل موقع WordPress محليًا على جهاز التطوير الخاص بك. هذه طريقة ممتازة لبدء استخدام WordPress حيث لا يتعين عليك إنشاء حساب أو شراء اسم مجال لاستضافة الويب.

قبل تثبيت WordPress محليًا ، يلزم تشغيل بعض المكونات على جهاز الكمبيوتر الخاص بك ، بما في ذلك خادم الويب Apache وقاعدة البيانات المحلية ولغة PHP التي تتم كتابة WordPress بها.

لحسن الحظ ، يمكننا استخدام DevKinsta ، وهي مجموعة تطوير WordPress محلية مجانية متاحة لجميع أنظمة التشغيل الرئيسية (ليس عليك أن تكون أحد عملاء Kinsta لاستخدامها).

DevKinsta متاح لأنظمة Windows و Mac و Linux ، ويقوم بتثبيت WordPress بالإضافة إلى جميع تبعياته على جهازك المحلي.

قبل تثبيت DevKinsta ، يجب أن يكون لديك Docker قيد التشغيل محليًا ، لذا قم بتنزيل Docker Engine وتثبيته إذا لم تكن قد قمت بذلك بعد.

بعد تثبيت Docker Desktop ، يمكنك تلقائيًا تنزيل الحزمة التي تناسب نظام التشغيل لديك.

لقطة شاشة صفحة تنزيل DevKinsta.
صفحة تثبيت DevKinsta.

عند تشغيل مثبّت DevKinsta ، يبدأ Docker في التهيئة على الفور:

بدء تشغيل شاشة Docker من DevKinsta.
يبدأ DevKinsta تشغيل Docker محليًا.

بعد ذلك ، اختر موقع WordPress جديد  من قائمة إنشاء موقع جديد  :

DevKinsta شاشة إنشاء موقع WordPress جديد.
قائمة DevKinsta إنشاء موقع جديد.

الآن يتطلب منك مثبّت DevKinsta إنشاء بيانات اعتماد لحساب مسؤول WordPress:

شاشة إنشاء موقع WordPress الجديد من DevKinsta.
DevKinsta يعرض نموذج موقع WordPress الجديد.

بمجرد التثبيت ، يعد DevKinsta تطبيقًا قائمًا بذاته. يمكنك الآن الوصول إلى كل من موقع WordPress (عبر زر Open Site  ) ولوحة معلومات مسؤول WordPress ( زر WP Admin  ).

شاشة معلومات موقع WordPress من DevKinsta.
لوحة معلومات موقع DevKinsta.

بعد ذلك ، تحتاج إلى تمكين SSL و HTTPS لموقع الويب الخاص بك. يؤدي ذلك إلى تحسين أمان موقع الويب الخاص بك من خلال شهادة SSL.

تمكين خيار SSL و HTTPS الخاص بـ DevKinsta.
خيار DevKinsta “SSL و HTTPS”.

انتقل الآن إلى تطبيق DevKinsta وانقر على زر  فتح الموقع  . ستعرض علامة تبويب المتصفح الجديدة الصفحة الرئيسية لموقع WordPress الخاص بك:

الصفحة الرئيسية لموقع WordPress المحلي الخاص بك.
الصفحة الرئيسية لـ WordPress.

هذه هي مدونة WordPress الخاصة بك ، حيث يمكنك البدء في الكتابة. ولكن لتمكين Python من الوصول إلى واجهة برمجة تطبيقات WordPress REST واستخدامها ، يجب علينا أولاً تهيئة مسؤول WordPress.

انقر الآن على زر WP Admin  في تطبيق DevKinsta ، ثم قدم المستخدم وكلمة المرور للوصول إلى لوحة معلومات WordPress :

شاشة تسجيل الدخول إلى لوحة تحكم المسؤول في WordPress.
نموذج تسجيل الدخول إلى WordPress.

بمجرد تسجيل الدخول ، سترى لوحة تحكم WordPress :

مرحبًا بك في شاشة مسؤول WordPress.
صفحة لوحة تحكم WordPress.

يستخدم WordPress مصادقة ملفات تعريف الارتباط كطريقة قياسية. ولكن إذا كنت تريد التحكم فيه باستخدام واجهة برمجة تطبيقات REST ، فيجب عليك المصادقة باستخدام تقنية تمنح الوصول إلى واجهة برمجة تطبيقات WordPress REST.

لهذا ، ستستخدم كلمات مرور التطبيق. هذه سلاسل طويلة مكونة من 24 حرفًا ينشئها WordPress ويربطها بملف تعريف مستخدم لديه إذن لإدارة موقع الويب الخاص بك.

لاستخدام كلمات مرور التطبيقات ، انقر على قائمة البرنامج المساعد  في لوحة التحكم ، ثم ابحث عن المكون الإضافي الذي يحمل نفس الاسم. ثم قم بتثبيت وتفعيل البرنامج المساعد لكلمات مرور التطبيقات:

تثبيت وتفعيل البرنامج المساعد WordPress Application Passwords.
البرنامج المساعد لكلمات مرور التطبيق لـ WordPress.

لبدء إنشاء كلمة مرور التطبيق ، ابدأ بتوسيع قائمة المستخدمين والنقر فوق كل المستخدمين :

توسيع قائمة المستخدمين وورد.
توسيع قائمة المستخدمين.

الآن ، انقر فوق تحرير  أسفل اسم المستخدم المسؤول الخاص بك:

انقر على
واجهة WP-Admin WordPress.

قم بالتمرير لأسفل في صفحة تحرير المستخدم  وابحث عن قسم كلمات مرور التطبيق . هنا ، قم بتوفير اسم لكلمة مرور التطبيق ، والتي ستستخدمها لاحقًا لمصادقة طلبات تطبيق Python الخاصة بك واستهلاك REST API:

لوحة معلومات البرنامج المساعد كلمات مرور التطبيق.
صفحة كلمة مرور التطبيق.

انقر فوق إضافة كلمة مرور جديدة للتطبيق  حتى يتمكن WordPress من إنشاء كلمة مرور عشوائية مكونة من 24 حرفًا لك:

كلمة المرور الجديدة التي تم إنشاؤها بواسطة البرنامج المساعد Application Passwords.
صفحة كلمة مرور التطبيق الجديدة.

بعد ذلك ، انسخ كلمة المرور هذه واحفظها في مكان آمن لاستخدامها لاحقًا. تذكر أنك لن تتمكن من استرداد كلمة المرور هذه بمجرد إغلاق هذه الصفحة.

أخيرًا ، يجب عليك تكوين الروابط الثابتة. يتيح لك WordPress إنشاء بنية عنوان URL مخصصة للروابط الثابتة والمحفوظات. دعنا نغيره بحيث يمكن الوصول إلى منشور WordPress بعنوان ، على سبيل المثال ، “موقع WordPress الأول الخاص بك” من خلال عنوان URL البديهي https: //your-website.local: port / your-first-wordpress-website /. يجلب هذا النهج العديد من الفوائد ، بما في ذلك تحسين قابلية الاستخدام والجماليات.

لتكوين الروابط الثابتة ، وسّع قسم الإعدادات  وانقر على قائمة الروابط الثابتة . هنا ، قم بتغيير الإعدادات العامة  إلى اسم النشر :

تغيير إعدادات الرابط الثابت لـ WordPress.

يعد إعداد بنية الرابط الثابت باستخدام بنية اسم  المنشور ضروريًا أيضًا لأنه سيسمح لنا باسترداد المنشورات لاحقًا في كود Python الخاص بنا باستخدام تنسيق JSON. وإلا ، فسيتم طرح خطأ في فك تشفير JSON.

كيفية التحكم في WordPress من Python

تمت كتابة WordPress بلغة PHP ، ولكنه يحتوي على واجهة برمجة تطبيقات REST تمكن لغات البرمجة والمواقع والتطبيقات الأخرى من استهلاك محتواها. إن عرض محتوى WordPress في بنية REST يجعله متاحًا بتنسيق JSON. لذلك ، يمكن أن تتكامل الخدمات الأخرى مع WordPress وتنفيذ عمليات الإنشاء والقراءة والتحديث والحذف (CRUD) دون الحاجة إلى تثبيت WordPress محلي.

بعد ذلك ، ستنشئ تطبيق Python بسيطًا لترى كيف يمكنك استخدام WordPress REST API لإنشاء واسترداد وتحديث وحذف المنشورات.

أنشئ دليلًا جديدًا لمشروع Python البسيط الجديد الخاص بك وقم بتسميته شيئًا مثل PythonWordPress:

../PythonWordPress

الآن ، ستنشئ بيئة افتراضية لمشروعك ، مما يسمح له بالحفاظ على مجموعة مستقلة من حزم Python المثبتة ، وعزلها عن أدلة نظامك وتجنب تعارض الإصدارات. قم بإنشاء بيئة افتراضية عن طريق تنفيذ venv الأمر:

python3 -m venv .venv

الآن ، قم بتشغيل أمر لتنشيط  البيئة الافتراضية .venv . يختلف هذا الأمر حسب نظام التشغيل:

  • شبابيك:.venvScriptsactivate
  • نظام التشغيل Mac / Linux:.venv/bin/activate

بعد ذلك ، قم بتخزين التكوين المتعلق بحساب WordPress الخاص بك. لفصل تكوين التطبيق عن كود Python الخاص بك ، قم بإنشاء ملف .env  في دليل المشروع الخاص بك ، وأضف متغيرات البيئة هذه إلى الملف:

WEBSITE_URL="<>"

API_USERNAME="<>"

API_PASSWORD="<>"

لحسن الحظ ، فإن قراءة البيانات أعلاه من تطبيق Python أمر سهل. يمكنك تثبيت حزمة Python-dotenv  حتى يتمكن تطبيقك من قراءة التكوين من ملف .env  :

 

pip install python-dotenv

بعد ذلك ، قم بتثبيت aiohttp ، عميل / خادم HTTP غير متزامن لـ Python:

pip install aiohttp

أضف الآن ملفًا باسم app.py بالرمز  التالي:

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())

يعرض الكود أعلاه قائمة وحدة التحكم ويطلب منك إدخال رقم لاختيار أحد الخيارات. بعد ذلك ، ستقوم بتوسيع هذا المشروع وتنفيذ الكود الذي يمكّنك من سرد جميع المنشورات واسترداد منشور معين باستخدام معرف المنشور الخاص به.

إحضار المشاركات في التعليمات البرمجية

للتفاعل مع WordPress REST API ، يجب عليك إنشاء ملف Python جديد. قم بإنشاء ملف باسم wordpress_api_helper.py  بالمحتوى التالي:

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("=====================================")

لاحظ استخدام مكتبة aiohttp  أعلاه. توفر اللغات الحديثة بناء الجملة والأدوات التي تمكن البرمجة غير المتزامنة. يؤدي ذلك إلى زيادة استجابة التطبيق من خلال السماح للبرنامج بأداء المهام جنبًا إلى جنب مع عمليات مثل طلبات الويب وعمليات قاعدة البيانات وإدخال / إخراج القرص. تقدم Python asyncio كأساس لإطار البرمجة غير المتزامن الخاص بها ، ومكتبة aiohttp مبنية على رأس  غير  متزامن لتوفير وصول غير متزامن إلى عمليات عميل / خادم HTTP التي تم إجراؤها في Python.

تعمل ClientSession الوظيفة أعلاه بشكل غير متزامن وتقوم بإرجاع session كائن ، والذي يستخدمه برنامجنا لإجراء عملية HTTP GET مقابل /wp-json/wp/v2/posts نقطة النهاية. الاختلاف الوحيد بين طلب استرداد جميع المنشورات وطلب واحد معين هو أن هذا الطلب الأخير يمرر post id معلمة في مسار URL /wp-json/wp/v2/posts/{id}:.

الآن ، افتح ملف app.py  وأضف import البيان:

from wordpress_api_helper import get_all_posts, get_post

بعد ذلك ، قم بتعديل main الوظيفة لاستدعاء الدالات get_all_posts والوظائف 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)

ثم قم بتشغيل التطبيق:

python app.py

سترى بعد ذلك قائمة التطبيق:

بدء تشغيل تطبيق Python المتصل بـ WordPress.
قائمة تطبيق Python.

جرب الآن الخيار 1 لعرض قائمة المنشورات التي يستردها تطبيق Python الخاص بك ، والخيار 2 لتحديد منشور:

جرب الخيار 1 لعرض قائمة المنشورات التي يستردها تطبيق Python الخاص بك ، والخيار 2 لتحديد منشور.
يعرض تطبيق Python قائمة المنشورات ومنشورًا واحدًا يختاره المستخدم.

إنشاء المشاركات في التعليمات البرمجية

لإنشاء منشور WordPress في Python ، ابدأ بفتح ملف wordpress_api_helper.py  وأضف 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}')

يستدعي هذا الرمز post الوظيفة في session الكائن ، ويمرر auth المعلمة بجانب عنوان URL لنقطة نهاية REST API. يحتوي auth الكائن الآن على مستخدم WordPress وكلمة المرور التي أنشأتها باستخدام كلمات مرور التطبيق. الآن ، افتح ملف app.py  وأضف الرمز للاستيراد create_post والقائمة:

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'

}

ثم أضف خيار قائمة ثالث:

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}")

بعد ذلك ، قم بتشغيل التطبيق وجرب الخيار 3 ، مرر العنوان والمحتوى لإنشاء منشور جديد في WordPress:

إنشاء منشور WordPress باستخدام Python.
يعرض تطبيق Python منشور WordPress الذي تم إنشاؤه حديثًا.

سيؤدي تحديد الخيار 1 مرة أخرى إلى إرجاع المعرف وعنوان المنشور المضاف حديثًا:

إعادة المعرف وعنوان المنشور المضاف حديثًا.
يقوم تطبيق Python بإعادة عنوان ومعرف المنشور الجديد.

يمكنك أيضًا فتح موقع WordPress الخاص بك لعرض المنشور الجديد:

المنشور الذي تم إنشاؤه حديثًا في المتصفح.
صورة المتصفح لمنشور WordPress الجديد.

 

تحديث المنشورات في الكود

افتح ملف wordpress_api_helper.py  وأضف 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}')

ثم افتح ملف app.py  وأضف رمزًا للاستيراد update_post والقائمة:

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'

}

ثم أضف خيار القائمة الرابع:

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}")

ثم قم بتشغيل التطبيق وجرب الخيار 4 ، مرر معرف المنشور والعنوان والمحتوى لتحديث منشور موجود.

تحديث منشور ووردبريس.
يعرض تطبيق Python القائمة المحدثة.

سيؤدي تحديد الخيار 2 وتمرير معرف المنشور المحدث إلى إرجاع تفاصيل المنشور المضاف حديثًا:

إعادة تفاصيل المنشور المحدث حديثًا.
يعرض تطبيق Python المنشور المحدث.

حذف المشاركات في الكود

يمكنك تمرير معرف المنشور إلى REST API لحذف منشور.

افتح ملف wordpress_api_helper.py  وأضف 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.')

افتح الآن ملف app.py  وأضف الرمز للاستيراد delete_post والقائمة:

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',

}

ثم أضف خيار القائمة الخامس:

elif option == 5:

print('Deleting a post...')

id = input_number('Enter the post id: ')

await delete_post(id)

الآن قم بتشغيل التطبيق وجرب الخيار 5 ، قم بتمرير معرف لحذف المنشور الحالي في WordPress:

حذف منشور WordPress باستخدام تطبيق Python.
يُظهر تطبيق Python حذف المنشور المحدد.

ملاحظة: قد يستمر ظهور المنشور المحذوف إذا قمت بتشغيل خيار List Posts  :

تطبيقات بيثون قائمة المشاركات.
يعرض تطبيق Python قائمة المنشورات الأصلية.

لتأكيد حذف المنشور ، انتظر بضع ثوان وجرب خيار قائمة المنشورات مرة أخرى. وهذا كل شيء!

ملخص

بفضل واجهة برمجة تطبيقات WordPress REST ومكتبات عميل HTTP في Python ، يمكن لتطبيقات Python و WordPress التعاون والتحدث مع بعضهما البعض. تتمثل فائدة واجهة برمجة تطبيقات REST في أنها تتيح لك تشغيل WordPress عن بُعد من تطبيق Python ، حيث تتيح لغة Python القوية إنشاء محتوى آليًا يتبع الهيكل والتردد المطلوبين.

يجعل DevKinsta إنشاء موقع WordPress محلي وتطويره أمرًا سريعًا وسهلاً. إنه يوفر بيئة محلية لتطوير سمات WordPress والإضافات ويقدم نموذج نشر مبسطًا من نموذج التثبيت القائم على Docker والمحتوى ذاتيًا.

ما هي تجربتك في العمل مع Python و WordPress؟

عندما تكون مستعدًا للتوسع في هذه التجربة ، يمكنك قراءة الدليل الكامل لأساسيات WordPress REST API لاستكشاف الاحتمالات الأخرى.


وفر الوقت والتكاليف وحقق أقصى قدر من أداء الموقع من خلال:

  • مساعدة فورية من خبراء استضافة WordPress ، 24/7.
  • تكامل Cloudflare Enterprise.
  • يصل الجمهور العالمي إلى 35 مركز بيانات حول العالم.
  • التحسين من خلال مراقبة أداء التطبيقات المضمنة لدينا.

كل ذلك وأكثر من ذلك بكثير ، في خطة واحدة بدون عقود طويلة الأجل ، وعمليات الترحيل المدعومة ، وضمان استرداد الأموال لمدة 30 يومًا. تحقق من خططنا أو تحدث إلى قسم المبيعات للعثور على الخطة المناسبة لك.

 

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى