เพิ่มสื่อบันทึกด้วย WP-Rest-API v2


10

ฉันต้องการความช่วยเหลือจากคุณในการอัปโหลดภาพสื่อในบล็อก WordPress ของฉันผ่านการรับรองความถูกต้อง Wp-rest-api v2 และ Oauth2

ฉันไม่พบเอกสาร REST API ในการส่งข้อมูลภาพของฉัน (ชื่อฟิลด์, โหมดการส่ง ... ?)

require('OAuth2/Client.php');
require('OAuth2/GrantType/IGrantType.php');
require('OAuth2/GrantType/AuthorizationCode.php');

const CLIENT_ID     = 'XXX';
const CLIENT_SECRET = 'XX';

const REDIRECT_URI           = 'http://127.0.0.1/test_api_wp/test.php';

const AUTHORIZATION_ENDPOINT = 'http://wordpress.local/oauth/authorize';
const TOKEN_ENDPOINT         = 'http://wordpress.local/oauth/token';

$client = new OAuth2\Client(CLIENT_ID, CLIENT_SECRET);

if (!isset($_GET['code']))
{
    $auth_url = $client->getAuthenticationUrl(AUTHORIZATION_ENDPOINT, REDIRECT_URI);
    header('Location: ' . $auth_url);
    die('Redirect');
}
else
{
    $params = array('code' => $_GET['code'], 'redirect_uri' => REDIRECT_URI);
    $response = $client->getAccessToken(TOKEN_ENDPOINT, 'authorization_code', $params); //authorization_code
    $token = $response['result']['access_token'];
    $client->setAccessToken($token);
    $client->setAccessTokenType(OAuth2\Client::ACCESS_TOKEN_BEARER);

}

$values = array(
    "date" => "2015-11-26 10:00:00",
    "date_gmt" => "2015-11-26 09:00:00",
    "modified" => "2015-11-26 10:00:00",
    "modified_gmt" => "2015-11-26 09:00:00",
    "status" => "future",
    "title" => "Titre media",       
    "description" => "description media",
    "media_type" => "image",
    "source_url" => "https://www.base64-image.de/build/img/mr-base64-482fa1f767.png"
);

$data = $client->fetch("wordpress.local/wp-json/wp/v2/media", $values, "POST");
echo "<pre>";print_r($data);echo "</pre>";

การตอบสนอง :

Array
(
    [result] => Array
        (
            [code] => rest_upload_no_data
            [message] => No data supplied
            [data] => Array
                (
                    [status] => 400
                )

        )

    [code] => 400
    [content_type] => application/json; charset=UTF-8
)

ความคิดใด ๆ ขอบคุณมาก


ฉันได้เพิ่มรหัสจากความคิดเห็นของคุณในคำถาม โปรดจำไว้ว่าคุณสามารถแก้ไขคำถามได้ตลอดเวลาเพื่อเพิ่มข้อมูลเพิ่มเติมหรือทำให้ชัดเจนยิ่งขึ้น
cybmeta

ส่วนเสริม;ในwordpress.local/wp-json/wp/v2/media";นั้นเป็น mistype ที่นี่หรือมันเป็นรหัสจริงของคุณด้วย?
cybmeta

อ้างอิงกับเอกสาร WP REST API v2 ต้องการปลั๊กอิน OAuthนี้ ฉันไม่ทราบว่าไลบรารีที่คุณใช้ (OAuth2 / Client.php) สามารถทำงานร่วมกับ WP REST API ได้หรือไม่ แต่อาจไม่
cybmeta

ขอบคุณมาก! พิเศษ ->; ไม่ได้อยู่ในรหัสจริงของฉัน! ฉันใช้ปลั๊กอิน OAuth อย่างเป็นทางการเพื่อรับรองความถูกต้องของฉันไฟล์ OAuth2.Client.php เป็นเพียงห้องสมุดที่จะทำให้การร้องขอ curl ได้อย่างง่ายดาย
kain34440

มีการสร้างส่วนสื่อ (เอกสาร) [ v2.wp-api.org/reference/media/] ฉันคิดว่าคุณsource_urlควรจะอยู่ข้างในpostวัตถุ
ville6000

คำตอบ:


8

ดังนั้น! นี้คือความสนุก.

โปรดทราบว่า WP-API ยังคงเป็นงานที่อยู่ระหว่างดำเนินการ

Disposition เนื้อหา

ฉันพบปัญหาที่รายงานในคิวปัญหา WP-APIเกี่ยวกับการจัดการเนื้อหา นี่เป็นส่วนหัวที่จำเป็นสำหรับการโพสต์เนื้อหาสื่อใหม่และมีข้อกำหนดที่เข้มงวดและเข้มงวดมากเมื่อนำเสนอในรูปแบบที่เหมาะสม

วัตถุประสงค์ของการสร้าง Media Endpoint

ก่อนอื่นลองย้อนกลับไปก่อน API สันนิษฐานว่า ณ จุดนี้คุณได้อัปโหลดไฟล์ใหม่ไปยังไดเรกทอรีที่ถูกต้องแล้ว จุดปลายนี้กำลังสร้างเนื้อหาสื่อในฐานข้อมูลที่อ้างอิงไฟล์นี้

การแก้ไขปัญหา

คุณต้องระบุชื่อไฟล์ของไฟล์สื่อเพื่อเชื่อมโยงกับเนื้อหาใหม่ของคุณ นี่ไม่ใช่ URL ระยะไกล ในขณะที่คุณสามารถดูจากเอกสาร v2 , source_urlและlinkเป็นแบบอ่านอย่างเดียว สิ่งที่คุณต้องทำเพื่อส่งเนื้อหาใหม่ของคุณให้ประสบความสำเร็จคือการเพิ่มสิ่งต่อไปนี้ไว้ในส่วนหัวของคุณ:

'Content-Disposition' => 'filename=name-of-file.jpg',

ตามที่กล่าวไว้ในตั๋วคุณไม่สามารถเพิ่มราคาหรือระบุวิธีการที่คุณใช้ในการส่งไฟล์ มันจะต้องอยู่ในรูปแบบดังกล่าวข้างต้น อย่างน้อยก็เป็นกรณีนี้จนกว่าพวกเขาจะเปลี่ยนมันทั้งหมด

ตรวจสอบว่าประเภทไฟล์เป็นหนึ่งในประเภทไฟล์ที่ยอมรับและคุณรวมถึงส่วนขยายของไฟล์ที่รวมอยู่ในคำขอด้วย ขอบคุณดร. ดีโอในความคิดเห็น

สำหรับบันทึกฉันหัวเราะด้วยความปิติยินดีเมื่อฉันคิดออกในที่สุดในที่สุด ... กลัวนรกจากภรรยาของฉัน


1
ขอบคุณมากสำหรับคำใบ้ด้วยContent-Disposition!
pH

ฉันคิดว่าคำตอบนี้เป็นเพียงคำใบ้และไม่ใช่คำตอบที่สมบูรณ์ ฉันกำลังปฏิบัติตามคำแนะนำนี้และฉันได้รับข้อผิดพลาดSorry, this file type is not permitted for security reasons
23732

@Brethlosze ฟังดูเหมือนปัญหาที่ไม่เกี่ยวข้อง WordPress บล็อกสื่อบางประเภทในกระบวนการอัปโหลดปกติ
MikeNGarrett

3
@Brethlosze นามสกุลไฟล์จะต้องเป็นหนึ่งในประเภทที่ยอมรับ เช่นนี้ใช้งานได้curl --request POST --url http://localhost/kayinjaproject/wp-json/wp/v2/media --header "cache-control: no-cache" --header "content-disposition: attachment; filename=tmp.png" --header "authorization: Basic cm9vdDppYW1haGVybw==" --header "content-type: image/png" --data-binary "@c:/gnu/png.png" --locationแต่ถ้าคุณไม่ใช้pngชื่อไฟล์tmp.pngคุณจะได้รับerror sorry, this file type is not permitted for security reasons
Dr Deo

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.