2016-03-03 132 views
1

我想讓php應用程序使用REST API在wordpress.com上創建文章。使用rest api創建文章wordpress.com

我用這個代碼:

<?php 

$curl = curl_init('https://public-api.wordpress.com/oauth2/token'); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
'client_id' => 12345, 
'redirect_uri' => 'http://example.com/wp/test.php', 
'client_secret' => 'L8RvNFqyzvqh25P726jl0XxSLGBOlVWDaxxxxxcxxxxxxx', 
'code' => $_GET['code'], // The code fromthe previous request 
'grant_type' => 'authorization_code' 
)); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

$auth = curl_exec($curl); 
$secret = json_decode($auth); 
$access_token = $secret->access_token; 


$post = array(
'title'=>'Hello World', 
'content'=>'Hello. I am a test post. I was created by 
the API', 
'date'=>date('YmdHis'), 
'categories'=>'API','tags=tests' 
); 
$post = http_build_query($post); 
$apicall = "https://public-api.wordpress.com/rest/v1/sites/mysite.wordpress.com/posts/new"; 
$ch = curl_init($apicall); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array 
('authorization: Bearer ' . $access_token,"Content-Type: application/x-www-form-urlencoded; 
charset=utf-8")); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
$return = curl_exec($ch); 
echo "<pre>"; 
print_r($return); 
exit; 

?> 

,但我得到這個錯誤:

{"error":"unauthorized","message":"User cannot publish posts"}

能幫我嗎?

感謝

+0

你的'client_secret'定義缺少'''。我希望這不是你真正的祕密...... –

+0

我打錯了。我編輯..任何想法這個錯誤? – vallez

回答

0

標準方式創建的帖子是使用cookies和隨機數。

但是我發現了一個更簡單的方法來做到這一點。

  1. 安裝Basic-Auth插件到您的wordpress。

  2. 與用戶名admin和密碼admin創建WordPress用戶(包括憑據不安全,僅用於演示目的)

  3. 使用代碼創建後:

    $username = 'admin'; 
    $password = 'admin'; 
    $rest_api_url = "http://my-wordpress-site.com/wp-json/wp/v2/posts"; 
    
    $data_string = json_encode([ 
        'title' => 'My title', 
        'content' => 'My content', 
        'status' => 'publish', 
    ]); 
    
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $rest_api_url); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
    
    curl_setopt($ch, CURLOPT_HTTPHEADER, [ 
        'Content-Type: application/json', 
        'Content-Length: ' . strlen($data_string), 
        'Authorization: Basic ' . base64_encode($username . ':' . $password), 
    ]); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    
    $result = curl_exec($ch); 
    
    curl_close($ch); 
    
    if ($result) { 
        // ... 
    } else { 
        // ... 
    } 
    

注在REST API的第二版以上的例子中被使用。