例子展示了如何通过Python连接和管理WordPress。

自学咖网努力为各位打造免费分享知识与教程网站

WordPress之所以成为最常用的内容管理系统(CMS),很大程度上得益于其应用编程接口(API)。WordPress的REST API使WordPress能够与用各种语言编写的其他应用程序“对话”——包括Python。

Python是一种可扩展的编程语言,具有多种用途和人类可读的语法,使其成为远程管理WordPress内容的强大工具。

这里有一些WordPress REST API在你的应用中的用例,以及你如何使用Python来支持它们。

使用预定义的模板,使您的应用程序能够快速将原始数据转换为带解释的格式化文章。

在Django和Python上构建一个后台应用程序,在每次特定对象的折扣或销售活动发生时向您的客户显示限时优惠。

整合Python脚本并在你的WordPress网站上运行它们

本教程将帮助您创建一个简单的Python控制台应用程序,与WordPress REST API通信并执行操作。完整的项目代码也是可用的。

安装和配置WordPress

如何从Python控制WordPress

获取代码中的文章

用代码创建一篇文章

更新代码中的文章。

删除代码中的文章

安装和配置WordPress

首先,让我们在你的开发机器上安装并运行一个WordPress网站。这是一个开始使用WordPress的好方法,因为你不需要创建一个帐户或者购买一个虚拟主机的域名。

在本地安装WordPress之前,你需要在电脑上运行一些组件,包括Apache web服务器、本地数据库和编写WordPress的PHP语言。

幸运的是,我们可以使用DevKinsta,这是一个免费的本地WordPress开发工具包,可以用于所有主要的操作系统(使用它不需要成为Kinsta的客户)。

DevKinsta可以用于Windows,Mac和Linux,并在您的本地机器上安装WordPress及其所有依赖项。

在安装DevKinsta之前,必须在本地运行Docker,所以如果你还没有下载安装Docker引擎的话。

安装Docker Desktop后,可以自动下载适合自己操作系统的软件包。

自学咖网努力为各位打造免费分享知识与教程网站

DevKinsta安装页面

当您运行DevKinsta安装程序时,Docker会立即开始初始化。

自学咖网努力为各位打造免费分享知识与教程网站

DevKinsta创建了一个新的网站菜单

现在,DevKinsta安装程序要求您为您的WordPress管理帐户创建凭证。

自学咖网努力为各位打造免费分享知识与教程网站

DevKinsta显示新的WordPress网站表格

一旦安装,DevKinsta就是一个独立的应用程序。现在你可以同时访问WordPress网站(通过打开网站按钮)和WordPress管理面板(WP管理按钮)。

自学咖网努力为各位打造免费分享知识与教程网站

DevKinsta的网站信息面板

接下来,您需要为您的网站启用SSL和HTTPS。这样可以通过SSL证书提高你网站的安全性。

自学咖网努力为各位打造免费分享知识与教程网站

DevKinsta的“SSL和HTTPS”选项

现在进入DevKinsta应用程序,单击Open site按钮。一个新的浏览器标签将显示你的WordPress网站的主页。

自学咖网努力为各位打造免费分享知识与教程网站

WordPress主页

这是你的WordPress博客,你可以在这里开始写作。但是为了让Python访问和使用WordPress REST API,我们必须首先配置WordPress Admin。

现在点击DevKinsta应用程序上的WP管理按钮,然后提供你的用户和密码来访问WordPress仪表盘。

自学咖网努力为各位打造免费分享知识与教程网站

WordPress登录表单

一旦你登录,你会看到WordPress仪表盘。

自学咖网努力为各位打造免费分享知识与教程网站

WordPress仪表板页面

WordPress使用cookie认证作为它的标准方法。然而,如果你想用REST API控制它,你必须用一种允许访问WordPress REST API的技术进行认证。

为此,您将使用应用程序密码。这些是由WordPress生成的24个字符的长字符串,链接到有权限管理你的网站的用户档案。

要使用应用程序密码,请单击仪表板上的插件菜单,然后搜索同名插件。然后安装并激活应用程序密码插件。

自学咖网努力为各位打造免费分享知识与教程网站

WordPress的应用程序密码插件

要开始创建您的应用程序密码,首先展开用户菜单并单击所有用户。

自学咖网努力为各位打造免费分享知识与教程网站

扩展用户菜单

现在,单击您的管理员用户名下的编辑。

自学咖网努力为各位打造免费分享知识与教程网站

管理界面

向下滚动“编辑用户”页面,找到“应用密码”部分。在这里,为应用程序密码提供一个名称,稍后您将使用它来验证您的Python应用程序的请求并使用REST API。

自学咖网努力为各位打造免费分享知识与教程网站

应用程序密码页面

点击添加新的应用程序密码,这样WordPress可以为您生成一个随机的24个字符的密码。

自学咖网努力为各位打造免费分享知识与教程网站

新应用程序密码页面

接下来,复制这个密码并保存在安全的地方以备后用。请记住,一旦您关闭此页面,您将无法找回此密码。

最后,您必须配置永久链接。WordPress允许你为你的永久链接和档案创建一个自定义的URL结构。我们来修改一下,让一篇WordPress文章的标题,比如“你的第一个WordPress网站”,可以通过直观的URL https://Your-Website . local:port/Your-First-WordPress-Website/。这种方法带来了一些好处,包括提高可用性和美观性。

要配置固定链路,请展开设置部分,然后单击固定链路菜单。在这里,将常用设置更改为文章名称。

自学咖网努力为各位打造免费分享知识与教程网站

也有必要使用Post name结构来设置固定链接结构,因为它将允许我们在未来的Python代码中使用JSON格式来检索文章。否则,将会抛出JSON解码错误。

如何从Python控制WordPress

WordPress是用PHP编写的,但它有一个REST API,使其他编程语言、网站和应用程序能够使用它的内容。在REST架构中公开WordPress的内容,并使其以JSON格式可用。因此,其他服务可以与WordPress集成,以执行创建、读取、更新和删除(CRUD)操作,而无需安装本地WordPress。

接下来,您将构建一个简单的Python应用程序,并了解如何使用WordPress REST API来创建、检索、更新和删除文章。

为新的简单Python项目创建一个新目录,并将其命名为PythonWordPress或类似的名称。

../PythonWordPress

现在,您将为您的项目创建一个虚拟环境,保留一组独立安装的Python包,将它们与您的系统目录隔离,并避免版本冲突。通过执行venv命令创建一个虚拟环境。

python3 -m venv .venv

现在,运行一个命令来激活。虚拟环境。该命令因操作系统而异。

Windows:。venvScriptsactivate

Mac/Linux:。venv/bin/激活

接下来,存储与你的WordPress账户相关的配置。要将应用程序的配置与Python代码分开,请创建一个。env文件,并将这些环境变量添加到该文件中。

WEBSITE_URL=””API_USERNAME=””API_PASSWORD=””

幸运的是,从Python应用程序中读取上述数据很容易。您可以安装Python-dotenv包,这样您的应用程序就可以从。环境文件。

pip install python-dotenv

然后,安装aiohttp,这是一个用于Python的异步http客户端/服务器。

pip install aiohttp

现在用下面的代码添加一个名为app.py的文件。

import asynciomenu_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 accordinglyif 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 …’)continueif value < 0:print("Sorry, your response must not be negative.")else:breakreturn valuedef input_text(prompt):while True:text = input(prompt)if len(text) == 0:print("Text is required.")continueelse:breakreturn textif __name__=='__main__':asyncio.run(main())

上面的代码显示了一个控制台菜单,要求您输入一个数字来选择一个选项。接下来,您将扩展这个项目并实现代码,以便您可以列出所有文章并使用其文章ID来检索特定的文章。

获取代码中的文章

为了与WordPress REST API交互,你必须创建一个新的Python文件。用以下内容创建一个名为wordpress_api_helper.py的文件。

import aiohttpimport base64import osimport jsonfrom dotenv import load_dotenvload_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库。现代语言提供了实现异步编程的语法和工具。这提高了应用程序的响应速度,因为它允许程序在进行网页请求、数据库操作和磁盘I/O操作的同时执行任务。Python提供了asyncio作为其异步编程框架的基础,aiohttp库建立在asyncio之上,为Python中的http客户端/服务器操作带来了异步访问。

上面的Clientsession函数异步运行并返回一个session对象,我们的程序使用该对象在/wp-json/wp/v2/posts端点上执行HTTP GET操作。检索所有文章的请求和检索特定文章的请求之间的唯一区别是,最后一个请求在URL route:/WP-JSON/WP/v2/posts/{ id }中传递了一个post id参数。

现在,打开app.py文件并添加导入语句。

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应用程序菜单

自学咖网努力为各位打造免费分享知识与教程网站

Python应用程序,显示文章列表和单个用户选择的文章

用代码创建一篇文章

要用Python创建一篇WordPress文章,首先打开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函数,并在REST API端点的URL旁边传递auth参数。Auth对象现在包含你用应用程序密码创建的WordPress用户和密码。现在,打开app.py文件,添加代码导入create_post和menu。

from wordpress_api_helper import get_all_posts, get_post, create_postmenu_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中创建新文章。

自学咖网努力为各位打造免费分享知识与教程网站

Python应用程序显示新创建的WordPress文章。

再次选择选项1将返回新添加文章的ID和标题。

自学咖网努力为各位打造免费分享知识与教程网站

Python应用程序返回新文章的标题和ID。

你也可以打开你的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_postmenu_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,传递文章的ID、标题和内容来更新现有的文章。

自学咖网努力为各位打造免费分享知识与教程网站

Python应用程序显示更新后的菜单。

选择选项2并传递更新的文章ID将返回新添加文章的详细信息。

自学咖网努力为各位打造免费分享知识与教程网站

Python应用程序显示更新的文章。

删除代码中的文章

您可以通过将文章的ID传递给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和menu。

from wordpress_api_helper import get_all_posts, get_post, create_post, update_post, delete_postmenu_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中id为的现有文章。

自学咖网努力为各位打造免费分享知识与教程网站

Python应用程序显示所选文章已被删除

注意:如果您运行“列出文章”选项,已删除的文章可能仍然会出现。

自学咖网努力为各位打造免费分享知识与教程网站

Python应用程序显示原创文章列表。

要确认您已删除文章,请等待几秒钟,然后再次尝试“列出文章”选项。就是这样!

总结

由于WordPress的REST API和Python的HTTP客户端库,Python应用程序和WordPress可以合作并相互对话。REST API的优势在于它允许你从Python应用程序远程操作WordPress,其中Python强大的语言可以根据你需要的结构和频率自动创建内容。

DevKinsta使得创建和开发一个本地WordPress网站变得快速而简单。它提供了开发WordPress主题和插件的本地环境,并通过其基于Docker的独立安装模式提供了简化的部署模型。

你在Python和WordPress的工作经验是怎样的?

当你准备扩展这些经验时,你可以阅读WordPress REST API基础的完整指南来探索其他的可能性。

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 例子展示了如何通过Python连接和管理WordPress。