专注国内外云服务器
分享建站技术教程

实例说明如何通过Python来连接管理WordPress

立即购买

阿里云服务器 ¥102元/年 云数据库37.5元/年 限时

个人、企业均可购买 | 更多配置0.8折特惠

WordPress已经成为最常用的内容管理系统(CMS),这在很大程度上是由于它的应用编程接口(API)。WordPress的REST API使WordPress能够与其他用各种语言编写的应用程序 “对话”–包括Python。

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

下面是一些WordPress REST API对你的应用程序的用例,以及你如何使用Python来支持它们。

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

  1. 安装和配置WordPress
  2. 如何从Python中控制WordPress
  3. 在代码中获取文章
  4. 用代码创建文章
  5. 更新代码中的文章
  6. 删除代码中的文章

安装和配置WordPress

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

在本地安装WordPress之前,需要在你的电脑上运行一些组件,包括Apache网络服务器、本地数据库和编写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网站(通过Open Site按钮)和WordPress管理仪表板(WP Admin按钮)。

DevKinsta的网站信息面板

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

DevKinsta的 “SSL和HTTPS “选项

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

WordPress主页

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

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

WordPress登录表单

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

WordPress仪表板页面

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

为此,你将使用应用密码。这些是WordPress生成的24个字符的长字符串,并与有权限管理你的网站的用户配置文件联系起来。

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

WordPress的应用密码插件

要开始创建你的应用程序密码,首先要展开Users菜单,点击All Users

扩展的用户菜单

现在,点击你的管理员用户名下面的编辑。

WP-Admin WordPress界面

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

申请密码页

点击Add New Application Password,这样WordPress就可以为你生成一个随机的24个字符的密码。

新的申请密码页面

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

最后,你必须配置permalinks。WordPress允许你为你的permalinks和archives创建一个自定义的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

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

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

WEBSITE_URL=""

API_USERNAME=""

API_PASSWORD=""

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

pip install python-dotenv

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

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 

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

在代码中获取文章

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

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

现在,打开app.py文件,添加 import 语句。

from wordpress_api_helper import get_all_posts, get_post

接下来,修改 main 函数以调用 get_all_postsget_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}')

这段代码在session 对象中调用 post 函数,在REST API端点的URL旁边传递auth 参数。 auth 对象现在包含WordPress用户和你用Application Passwords创建的密码。现在,打开 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中创建一个新的文章。

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_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,传递一个文章的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 和菜单。

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,通过一个id来删除WordPress中的现有文章。

Python应用程序显示删除了选定的文章

注意:如果你运行列表文章选项,被删除的文章可能还会出现。

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

要确认你已经删除了文章,请等待几秒钟,然后再试一下 “列出文章”选项。就这样了!

小结

由于WordPress的REST API和Python的HTTP客户端库,Python应用程序和WordPress可以组队并相互交谈。REST API的好处是,它允许你从Python应用程序中远程操作WordPress,其中Python的强大语言能够按照你所需要的结构和频率自动创建内容。

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

你在Python和WordPress方面有什么工作经验?

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

文章来源于互联网:实例说明如何通过Python来连接管理WordPress

相关推荐: 如何使用WooCommerce所有评论区块

大多数现代客户在进行最小的购买之前都会查看产品评论。为您自己的产品启用用户评论有助于您与新客户建立信任,并让他们与其他买家分享重要信息。在您的网站上显示评论的最佳方法之一是使用 WooCommerce 所有评论区块。 在本文中,我们将讨论 WooCommerc…

赞(0)
未经允许不得转载:吾上云 » 实例说明如何通过Python来连接管理WordPress
分享到: 更多 (0)
  • 阿里云
    基础型云服务器

    1核CPU

    2G内存

    40G硬盘

    1M带宽

    独立IP

    分布式存储

    适合企业官网、个人站长类网站

    ¥89/1年 原价¥903.40

  • 阿里云
    超值型云服务器

    2核CPU

    4G内存

    40G硬盘

    3M带宽

    独立IP

    分布式存储

    适合企业官网、行业门户类网站

    ¥899/3年 原价¥8281

  • 阿里云
    高性能云服务器

    2核CPU

    8G内存

    40G硬盘

    5M带宽

    独立IP

    分布式存储

    适合电商、数据库等企业级应用

    ¥1399/3年¥14765

  • 腾讯云
    基础型云服务器

    1核CPU

    2G内存

    50G硬盘

    1M带宽

    独立IP

    分布式存储

    适合企业官网、个人站长类网站

    ¥95/1年 原价¥834

  • 腾讯云
    超值型云服务器

    1核CPU

    2G内存

    50G硬盘

    1M带宽

    独立IP

    分布式存储

    适合企业官网、行业门户类网站

    ¥288/3年 原价¥2502

  • 腾讯云
    高性能云服务器

    4核CPU

    8G内存

    50G硬盘

    5M带宽

    独立IP

    分布式存储

    适合电商、数据库等企业级应用

    ¥2188/3年¥13986

  • 阿里云
    基础型云服务器

    1核CPU

    2G内存

    40G硬盘

    1M带宽

    独立IP

    分布式存储

    适合企业官网、个人站长类网站

    ¥89/1年 原价¥903.40

  • 阿里云
    超值型云服务器

    2核CPU

    4G内存

    40G硬盘

    3M带宽

    独立IP

    分布式存储

    适合企业官网、行业门户类网站

    ¥899/3年 原价¥8281

  • 阿里云
    高性能云服务器

    2核CPU

    8G内存

    40G硬盘

    5M带宽

    独立IP

    分布式存储

    适合电商、数据库等企业级应用

    ¥1399/3年¥14765

  • 腾讯云
    基础型云服务器

    1核CPU

    2G内存

    50G硬盘

    1M带宽

    独立IP

    分布式存储

    适合企业官网、个人站长类网站

    ¥95/1年 原价¥834

  • 腾讯云
    超值型云服务器

    1核CPU

    2G内存

    50G硬盘

    1M带宽

    独立IP

    分布式存储

    适合企业官网、行业门户类网站

    ¥288/3年 原价¥2502

  • 腾讯云
    高性能云服务器

    4核CPU

    8G内存

    50G硬盘

    5M带宽

    独立IP

    分布式存储

    适合电商、数据库等企业级应用

    ¥2188/3年¥13986

评论 抢沙发

评论前必须登录!

 

吾上云 专注服务器选购

购买云服务器联系我们