#假設您熟悉 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中文網其他相關文章!