如何仅使用REST API将附件分配给帖子?

时间:2021-03-05 作者:Tapedeck

我可以通过针对REST API发送带有cURL的请求来创建一篇新文章。这很好用。

我还可以通过REST API将文件上载到带有cURL的媒体库中。上传的文件在媒体库中按预期正确显示。

但是,我如何在不使用本机WordPress函数的情况下将这些上传的文件分配给之前创建的帖子,以便它们被WordPress主题中的get\\u attached\\u media()函数识别?

当前已创建帖子,文件已上载,但未附加到帖子。

我想通过只使用RESTAPI和一些PHP代码而不使用任何WordPress函数来解决这个问题。

function upload_file_to_wp($filename) {
    $file = file_get_contents($filename);
    $mime = mime_content_type($filename);
    $url =  WP_URL . \'media\';
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $file);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
            \'Content-Type: \' . $mime,
            \'Content-Disposition: attachment; filename="\' . basename($filename) . \'"\',
    ]);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, WP_USER . \':\' . WP_PASS);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $result = curl_exec($ch);
    curl_close($ch);
    
    if (defined(\'WP_DEBUG\') && WP_DEBUG !== false) {
        error_log(\'[\' . date(\'Y-m-d H:i:s\') . \'] cURL result: \' . print_r(json_decode($result, JSON_OBJECT_AS_ARRAY), true) . "\\n", 3, DEBUG_FILE);
    }
}
WP\\u URL是REST API端点。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

如果你看the documentation 对于媒体端点,您将看到有一个字段,post, 您可以使用其ID将媒体附加到帖子。

post 附件的关联帖子的ID。