Hochladen von Medien mit der REST-API

9

Ich habe Probleme beim Hochladen von Medien auf eine WordPress-Site mit der JSON REST-API.

Mit dem folgenden Code kann ich die Fotos hochladen, aber ihnen werden keine Informationen zugewiesen, nicht einmal der Name - tatsächlich wird der Name automatisch zur URL und zum Dateinamen (ohne die Erweiterung).

$username = "ZX";
$password = "ZX";
$host = 'http://ZX.com/wp-json/wp/v2/media';
$data = json_encode($data);
$file = '/Users/xx.png';
$imagedata  = file_get_contents($file);
$process = curl_init($host); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($process, CURLOPT_TIMEOUT, 50);
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($process, CURLOPT_POSTFIELDS, $data);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type:image/png','Content-Disposition:attachment;filename='.$file));
$return = curl_exec($process);
print_r($return);

Wie würde ich den Uploads Daten wie die folgenden zuweisen?

$data = array(
  "status" => "draft",
  "title" => "Photo media",       
  "description" => "Photo media1",
  "media_type" => "image",
  "alt_text" => "alternate text"
  );
Diario de Morelia
quelle

Antworten:

3

Dies ist über die API nicht möglich. Sie müssen das Bild selbst abrufen und die Daten selbst an die API senden . Blockquote

- Dies zitiert Ryan zum GitHub-Problem, das in der Antwort von @Dan (gelöscht) erwähnt wird.

So laden Sie Bilder von der Seite

Beachten Sie, dass der media_sideload_image()Rückgabewert auch eine Instanz von sein kann \WP_Error. Sie müssen es dann nur noch an einen Beitrag anhängen, was ganz einfach ist:

$media = media_sideload_image( 
    'http://i.imgur.com/bcJvAj0.jpg', 
    $post->ID, 
    'Some image description', 
    'src'
);

if ( ! empty( $media ) and ! is_wp_error( $media ) ) {
    // reference new image to set as featured
    $attachments = get_posts( [
        'post_type'      => 'attachment',
        'posts_per_page' => 1,
        'post_status'    => 'any',
        'post_parent'    => $post->ID,
    ] );

    if ( is_array( $attachments ) ) {
        set_post_thumbnail( $post->ID, $attachments[0]->ID );
    }

    // Test print our image. The return value is the src of the sideloaded image.
    printf( '<img src="%s" />', $media );
}

Die Einbauten

Ein kurzer Rückblick durch den Kern, der erklärt, warum Sie sich an die API halten sollten:

Werfen Sie einen Blick auf die Quelle von, um media_sideload_image()zu sehen, ob download_url()intern wp_safe_remote_get()ein Wrapper verwendet wird \WP_HTTP::get(). Dies bedeutet, dass es die gesamte WP-API bietet, während es ziemlich sicher, debuggbar und einfach zu bedienen ist. Der Rückgabewert download_url()ist das Ergebnis wp_tempnam(), das alle möglichen nimmt /tmpStandorte berücksichtigt werden (es gibt viele) und stellt sicher , dass Ihre Lage ist beschreibbar . Das media_handle_sideload()generiert alle benötigten Anhangsdaten und Metadaten.

Kaiser
quelle
Welches ist die zitierte Frage? Ist diese Methode noch gültig?
Brethlosze
Siehe Update und GitHub-Issue-Link im Zitat. Und warum sollte es nicht gültig sein? Wenn Sie es noch einmal überprüfen möchten, folgen Sie einfach dem Kaninchenbau entlang der Linien der Interna und vergleichen Sie die aktuelle WP-Version mit dem hier verlinkten Code. Das ist nicht so schwer.
Kaiser
Da diese Antwort aus dem Jahr 2016 stammt, möchte ich nur sicherstellen, dass die REST-API ab 2019 nicht mehr Dateien in mediaObjekte hochladen kann, daher kann man sich auf WP-Funktionen konzentrieren.
Brethlosze
@Brethlosze wie gesagt: Bitte schauen Sie sich den Kerncode an. Ich habe keine neuen Informationen zu diesem Thema, da ich momentan nicht viel mit WP arbeite.
Kaiser