It is assumed that you are familiar with the XML-RPC protocol and how it works, even in WordPress, and that you have used it before. Add posts, delete pages, etc. That’s all well and good for text, but what happens when you want to send files like images to WordPress?
In this tutorial, we will cover a very simple way to send an image to WordPress so that it displays in the media section of the admin panel. We’ll be sending this image using PHP so you can use this code with a WordPress plugin, theme, or even just plain PHP like in our example.
To get a general idea of what we're going to do and how to do it, I'm going to start this tutorial with a plan. Basically, we are going to make a PHP script that will upload a file (a jpeg image to be more precise) to a local WordPress installation.
We will use a PHP library to create an XML-RPC client in PHP, which we will use to connect to the WordPress XML-RPC server and send data. The client is a PHP library called "The Incutio XML-RPC Library for PHP", which can be found at script.incutio.com
Please note: This example is for demonstration purposes only for this tutorial and is a very basic and straightforward example
For this tutorial, the first thing you need is a working version of WordPress with PHP and MySQL installed on your Apache server. You can also use it locally, which is what I recommend and is actually the example we'll use in this tutorial.
Another thing you'll need is the XML-RPC library we're using in this tutorial. The library is free with a BSD license and can be found at scripts.incutio.com
The library is actually just a PHP file called IXR_Library.php which we will use in this tutorial. The next thing you need to do is create a directory within the htdocs (or web root) folder of your local server installation where you will copy the IXR_Library.php file and also Create an index.php file next to it. The index.php file needs to be empty now.
The most important thing we need to do in the WordPress installation is to activate the XML-RPC service. WordPress disables this feature by default, so we need to go into the settings in the admin panel and activate it. To do this, go toSettings -> Writing and under the Remote Publishing heading you will find a checkbox next to XML-RPC Default Deselect it. Select it and click Save Changes.
Now we can communicate with WordPress’s built-in XML-RPC server.
index.php file mentioned earlier using your favorite code editor.
Include libraryindex.php file and add the following code (don’t forget to start with the PHP tag, as shown in the example):
<?php include_once('IXR_Library.php'); ?>
Read image (Jpeg file)
index.php file (in the same directory) and in the next section we will read its contents and It is stored in a variable for later use.
$myFile = "test.jpg"; $fh = fopen($myFile, 'r'); $fs = filesize($myFile); $theData = fread($fh, $fs); fclose($fh);
$myfile which contains the string value of the file name, since it is in the same folder, no card is needed Keep any other path information for it, just the name, in this case
test.php.
fopen to do this, which we combine with the first argument of the previous variable
$myFile and the The two parameters are used together with another string that represents the operation we want to perform on the file. A string value of
r indicates that
is reading . We add the result of opening the file to the variable $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 发出请求。
The above is the detailed content of Upload images to WordPress using XML-RPC and PHP. For more information, please follow other related articles on the PHP Chinese website!