wake-up-neo.net

Hochladen von Medien mit der REST API

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

Mit dem folgenden Code kann ich die Fotos hochladen, aber ihnen werden keine Informationen zugewiesen, nicht einmal der Name - der Name wird 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"
  );
9

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

- Dies zitiert Ryan zum GitHub – Thema erwähnt in @Dan (gelöschte) Antwort.

So laden Sie Bilder von der Seite

Beachten Sie, dass der Rückgabewert media_sideload_image() auch eine Instanz von \WP_Error sein kann. Sie müssen es dann nur noch an einen Post 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

Eine kurze Rückverfolgung durch den Kern, die erklärt, warum Sie sich an die API halten sollten:

Werfen Sie einen Blick auf die Quelle von media_sideload_image() , um zu sehen, ob download_url() intern verwendet wird, das wp_safe_remote_get() , einen Wrapper für \WP_HTTP::get() . Dies bedeutet, dass es die gesamte WP API bietet und dabei ziemlich sicher, debuggbar und benutzerfreundlich ist. Der Rückgabewert von download_url() ist das Ergebnis von wp_tempnam() , das alle möglichen /tmp-Positionen berücksichtigt (es gibt viele) und sicherstellt, dass Ihre Position beschreibbar ist. Die media_handle_sideload() generiert alle benötigten Anhangsdaten und Metadaten.

3
kaiser