假设您熟悉 XML-RPC 协议及其工作原理,甚至在 WordPress 中也是如此,并且您以前使用过它。添加帖子、删除页面等。对于文本来说一切都很好,但是当您想将图片等文件发送到 WordPress 时会发生什么?
在本教程中,我们将介绍一种将图片发送到 WordPress 的非常简单的方法,以便它显示在管理面板的媒体部分中。我们将使用 PHP 发送这张图片,以便您可以将此代码用于 WordPress 插件、主题,甚至只是简单的 PHP,就像我们的示例中一样。
为了大致了解我们将要做什么以及如何做,我将以一个计划开始本教程。基本上,我们将制作一个 PHP 脚本,将文件(更准确地说是 jpeg 图像)上传到本地 WordPress 安装。
我们将使用一个 PHP 库来在 PHP 中创建 XML-RPC 客户端,我们将用它来连接到 WordPress XML-RPC 服务器并发送数据。该客户端是一个名为“The Incutio XML-RPC Library for PHP”的 PHP 库,可以在 script.incutio.com 上找到
请注意:此示例仅用于本教程的演示目的,是一个非常基本且直接的示例
对于本教程,您首先需要的是 Apache 服务器上安装了 PHP 和 MySQL 的 WordPress 工作版本。您也可以在本地使用它,这是我推荐的,实际上也是我们将在本教程中使用的示例。
您需要的另一件事是我们在本教程中使用的 XML-RPC 库。该库是免费的,具有 BSD 许可证,可以在 scripts.incutio.com 上找到
该库实际上只是一个名为 IXR_Library.php 的 PHP 文件,我们将在本教程中使用它。您需要做的下一件事是在本地服务器安装的 htdocs(或 Web 根)文件夹中创建一个目录,您将在其中复制 IXR_Library.php 文件并还在其旁边创建一个 index.php 文件。 index.php 文件现在需要为空。
在WordPress安装中我们需要做的最重要的事情是激活XML-RPC服务。 WordPress 默认情况下禁用此功能,因此我们需要进入管理面板中的设置并激活它。为此,请转到设置 -> 写作,然后在远程发布标题下,您会发现 XML-RPC 旁边有一个复选框默认情况下取消选择它。选择它并单击“保存更改”。
现在,我们可以与 WordPress 内置的 XML-RPC 服务器进行通信。
有趣的部分来了,让我们开始吧!使用您最喜欢的代码编辑器打开前面提到的 index.php 文件。
我们需要做的第一件事是包含我们刚刚下载的库文件,以便我们以后可以使用它。因此,我们编辑 index.php 文件并添加以下代码(不要忘记以 PHP 标记开头,如示例中所示):
<?php include_once('IXR_Library.php'); ?>
这基本上涵盖了我们的脚本工作所需的所有内容。简而言之,我们将使用刚刚包含的库的客户端部分。我们稍后会执行此操作。
因为我们需要将图像(jpg 文件)发送到 WordPress,所以我们需要以某种方式发送它。解决方案是以位格式发送它,就像您稍后将看到的那样,XML-RPC 服务器功能请求它。但是要像这样发送它,我们需要将其内容转换为位,并且为此我们需要获取其内容。该文件(任何 jpg 图片文件,我们将其命名为 test.jpg)将放置在 index.php 文件旁边(在同一目录中),在下一部分中,我们将读取其内容并将其存储在变量中以供以后使用。
$myFile = "test.jpg"; $fh = fopen($myFile, 'r'); $fs = filesize($myFile); $theData = fread($fh, $fs); fclose($fh);
上面的代码的作用是,首先,它创建一个名为 $myfile
的新变量,其中包含文件名的字符串值,因为它位于同一文件夹中,所以不需要卡住任何其他路径信息对于它,只是名称,在本例中为 test.php。
接下来我们需要打开该文件,因此我们使用 PHP 函数 fopen
来完成此操作,我们将其与上一个变量的第一个参数 $myFile
和第二个参数另一个字符串一起使用,该字符串表示我们要执行的操作将在文件上进行操作。 r
的字符串值表示正在读取。我们将打开文件的结果添加到变量 $fh
。
然后,因为我们需要文件内容长度,所以我们将使用 PHP 函数 $filesize
返回的值创建变量 $fs
,该函数使用参数 $myFile
最后,我们进入读取部分,我们将执行读取操作的函数返回的值赋予变量 $theData
,即 fread
。该函数使用两个参数,第一个是之前打开的文件变量($fh
),第二个是之前设置的文件大小($fs
)。
最后,我们使用函数 fclose
及其参数 $fh
关闭打开的文件。此时,我们已经有了 jpg 文件的内容,我们将把它发送到 WordPress 的 XML-RPC 服务器。
在下一部分中,我们将使用刚刚导入的库连接到 WordPress 的安装 XML-RPC 服务器。为此,我们需要以下 3 个变量:
$usr
(管理面板用户名),$pwd
(管理面板密码)和$xmlrpc
(XML-RPC 服务器路径)。请注意,XML-RPC 服务器路径由基本 WordPress 安装 URL + 斜杠后面的 xmlprc.php 文件组成。$usr = 'admin'; $pwd = 'admin'; $xmlrpc = 'http://localhost/wordpress/xmlrpc.php'; $client = new IXR_Client($xmlrpc);
接下来我们需要创建对服务器的调用。为此,我们将使用刚刚创建的 URL 字符串和从导入的库文件继承的 IXR_Client
类。此时,变量 $client 被声明为该链接的新客户端,并且所有操作都将使用它来完成。
下一部分是可选的,但如果您愿意,您可以像这样激活调试:
$client->debug = true;
如果您激活它,您将可以更清楚地了解出现问题时发生的情况。
在发送数据之前,我们必须正确组织和格式化数据,并且由于我们需要发送数据的方式,我们必须创建一个包含所有值的数组。我们将此数组命名为 $params 并为其指定以下值:
$params = array('name' => 'test.jpg', 'type' => 'image/jpg', 'bits' => new IXR_Base64($theData), 'overwrite' => false);
首先,我们需要为 name 的数组索引名称指定 'test.jpg 的值,因为这将是文件的名称。之后我们有索引名称 type
,我们给出 image/jpg 的值。这是我们正在上传的文件类型。然后我们就有了名为 bits 的索引,它实际上是我们需要发送的文件。现在,WordPress XML-RPC API 要求以 64 位为基础发送该值。为了正确执行此操作,我们将使用变量 $theData
,但我们需要通过类 IXR_Base64
运行它,以便将其相应地编码为 base64
位。为了将文件按请求成功发送到服务器,base64 编码的格式正确非常重要。 Base64 编码有多种,如果使用了不正确的编码,将不可避免地出现错误。上面示例中使用的 IXR_Base64
类按照服务器的要求转换文件的内容。最后,将索引类型 overwrite
设置为 false,将 false 属性赋予覆盖同名现有文件的选项。
要使该脚本正常工作,我们需要做的最后一件事是通过激活来自 $client
变量的请求将数据发送到 WordPress,如下所示:
$res = $client->query('wp.uploadFile',1, $usr, $pwd, $params);
$res
变量给出从 $client
变量内部调用的 query
函数的结果,该变量表示最初声明和启动的 XML-RPC 客户端实现。基本上我们正在向服务器发送请求。服务器将收到带有以下参数的请求:
wp.uploadFile
- 我们调用并用于上传文件所需的服务函数1
- 博客ID(每个WordPress博客都有一个ID,默认为1$usr
- 先前声明的用户名变量。$pwd
- 先前声明的密码变量。$params
- 我们刚才讨论的参数数组。以上所有代码放在一起看起来像这样:
实现这样的客户端并不难,但是因为有时你要构建的代码是特定的,所以你需要知道你在做什么,这样才能达到预期的效果。 PHP 中针对 WordPress XML-RPC 上传文件服务器请求的 XML-RPC 客户端实现就是这样一个示例。如果您发送的数据格式不正确,则可能不会被接受。这个例子虽然只有几行代码,但是非常具体。相同的客户端可用于制作任何其他类型的
使用带有适当参数的不同 XML-RPC 请求函数向 WordPress 发出请求。
以上是使用XML-RPC和PHP将图片上传到WordPress的详细内容。更多信息请关注PHP中文网其他相关文章!