Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][curl] Upload obrazka na WORDPRESS
Forum PHP.pl > Forum > PHP
tomeknh
Na wstępie chciałem się przywitać gdyż nie logowałem się tutaj dobre 7 lat wink.gif

Tak wiec mam problem z uploadem obrazka do Wordpress.

Problem logowania i przesłania danych POSTEM rozwiązałem tak:

  1. $log = "admin";
  2. $password = "admin";
  3. $redirect = "submit-property/";
  4.  
  5. $ch = curl_init();
  6. curl_setopt($ch, CURLOPT_URL, 'http://localhost/wordpress/wp-login.php');
  7. curl_setopt($ch, CURLOPT_POSTFIELDS,'log='.urlencode($log).'&pwd='.urlencode($password).'&redirect_to='.urlencode($redirect));
  8.  
  9.  
  10.  
  11. curl_setopt($ch, CURLOPT_URL, 'http://localhost/wordpress/submit-property/');
  12. curl_setopt($ch, CURLOPT_POSTFIELDS, 'title=sex&description=rap&address=Kraków, osiedle Centrum&property_nonce=submit_property&action=add_property&location=12'); //dane do wyslania
  13.  
  14.  
  15. curl_setopt($ch, CURLOPT_POST, 1);
  16. curl_setopt($ch, CURLOPT_HEADER, 0);
  17. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  18. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  19. curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
  20. curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
  21. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  22. curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
  23.  
  24.  
  25.  
  26.  
  27. $result = curl_exec($ch);
  28.  
  29. echo $result;



Wszystko się ładnie loguję do Wordpress, przesyła dane do formularza, który się wykonuję - jednak aby w pełni go wysłać potrzebuję wgrać jeszcze obrazki.

Obrazki wgrywa się standardowo jak w każdym wordpress poprzez BIBLIOTEKĘ MEDIÓW -> DODAJ NOWE...
Niestety nie ma tam standardowego formularza a pokombinowane przez JavaScript ładowanie obrazków...

Nawet nie wiem na czym jest to oparte, na PLUPLOAD?

Proszę o jakąkolwiek pomoc.
Damonsson
Podejrzyj sobie jakie idzie zapytanie jak dodajesz normalnie. Jakkolwiek by nie było napisane i na czym zrobione, koniec końców musi iść zwykły post request i tylko to Ci potrzebne do cURLa.
andrew654
Skoro i tak masz login i hasło do wordpress, to może przez XML-RPC wbudowane w niego? Obsługuje błędy wysyłania, itp, itd:
https://codex.wordpress.org/XML-RPC_WordPress_API/Media
wp.uploadFile
Będzie mniej więcej tak:
  1. <?php
  2. //Plik
  3. $plik = "test.jpg";
  4. $fh = fopen($plik, 'r');
  5. $fs = filesize($plik);
  6. $dane = fread($fh, $fs);
  7. fclose($fh);
  8. //xml rpc
  9. require_once 'ixr.php';
  10. $blogid = 1
  11. $log = "admin";
  12. $password = "admin";
  13. $link = ''http://localhost/wordpress/';
  14.  
  15. $q = new IXR_Client($link.'xmlrpc.php');
  16.  
  17. $data = array('name' => 'test.jpg', 'type' => 'image/jpg', 'bits' => new IXR_Base64($dane), 'overwrite' => false);
  18. $q->query('wp.uploadFile', $blogid, $log, $password, $data);
  19.  
  20. $error = $q->getErrorCode().': '.$q->getErrorMessage();
  21. ?>


tomeknh
Andrew - dziękuję bardzo za pomoc! XML RPC jest o wiele lepszym rozwiązaniem.

Wykombinowałem taki kod, który dodaje nowy post z obrazkiem, jednak obrazek za nic nie chce się dodać. Post wlatuję bez problemów.

I niestety od kilku godzin nic nie mogę wymyślić sensownego - więc proszę Was o pomoc.

  1. <?php
  2. if(!function_exists('mime_content_type')) {
  3.  
  4. function mime_content_type($filename) {
  5. $mime_types = array(
  6. 'txt' => 'text/plain',
  7. 'htm' => 'text/html',
  8. 'html' => 'text/html',
  9. 'php' => 'text/html',
  10. 'css' => 'text/css',
  11. 'js' => 'application/javascript',
  12. 'json' => 'application/json',
  13. 'xml' => 'application/xml',
  14. 'swf' => 'application/x-shockwave-flash',
  15. 'flv' => 'video/x-flv',
  16. // images
  17. 'png' => 'image/png',
  18. 'jpe' => 'image/jpeg',
  19. 'jpeg' => 'image/jpeg',
  20. 'jpg' => 'image/jpeg',
  21. 'gif' => 'image/gif',
  22. 'bmp' => 'image/bmp',
  23. 'ico' => 'image/vnd.microsoft.icon',
  24. 'tiff' => 'image/tiff',
  25. 'tif' => 'image/tiff',
  26. 'svg' => 'image/svg+xml',
  27. 'svgz' => 'image/svg+xml',
  28. // archives
  29. 'zip' => 'application/zip',
  30. 'rar' => 'application/x-rar-compressed',
  31. 'exe' => 'application/x-msdownload',
  32. 'msi' => 'application/x-msdownload',
  33. 'cab' => 'application/vnd.ms-cab-compressed',
  34. // audio/video
  35. 'mp3' => 'audio/mpeg',
  36. 'qt' => 'video/quicktime',
  37. 'mov' => 'video/quicktime',
  38. // adobe
  39. 'pdf' => 'application/pdf',
  40. 'psd' => 'image/vnd.adobe.photoshop',
  41. 'ai' => 'application/postscript',
  42. 'eps' => 'application/postscript',
  43. 'ps' => 'application/postscript',
  44. // ms office
  45. 'doc' => 'application/msword',
  46. 'rtf' => 'application/rtf',
  47. 'xls' => 'application/vnd.ms-excel',
  48. 'ppt' => 'application/vnd.ms-powerpoint',
  49. // open office
  50. 'odt' => 'application/vnd.oasis.opendocument.text',
  51. 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
  52. );
  53. $ext = explode('.',$filename);
  54. $ext = strtolower(array_pop($ext));
  55. if (array_key_exists($ext, $mime_types)) {
  56. return $mime_types[$ext];
  57. }
  58. elseif (function_exists('finfo_open')) {
  59. $finfo = finfo_open(FILEINFO_MIME);
  60. $mimetype = finfo_file($finfo, $filename);
  61. finfo_close($finfo);
  62. return $mimetype;
  63. }
  64. else {
  65. return 'application/octet-stream';
  66. }
  67. }
  68. }
  69.  
  70.  
  71. include_once( '../k2wordpress/wp-includes/class-IXR.php' );
  72. include_once( '../k2wordpress/wp-includes/class-wp-http-ixr-client.php' );
  73.  
  74.  
  75. $usr = 'admin';
  76. $pwd = 'admin';
  77. $xmlrpc = 'http://localhost/k2wordpress/xmlrpc.php';
  78. $client = new IXR_Client($xmlrpc);
  79.  
  80.  
  81. // zdjęcie
  82. $img_attach = 'test.jpg';
  83. $img_attach_content = array(
  84. 'name' => basename($img_attach),
  85. 'type' => mime_content_type($img_attach),
  86. 'bits' => new IXR_Base64(file_get_contents($img_attach)),
  87. );
  88. $status = $client->query( 'wp.uploadFile','1', $usr, $pwd, $img_attach_content );
  89. $image_returnInfo = $client ->getResponse();
  90.  
  91. // dodanie postu
  92. $custom_fields = array(
  93. array( 'key' => 'blabla1', 'value' => 'blabla1_value' ),
  94. array( 'key' => 'blabla12', 'value' => 'blabla1_value2')
  95. );
  96. $post_content = array(
  97. 'post_type' => 'post',
  98. 'post_status' => 'draft', //for now
  99. 'post_title' => 'XMLRPC Test',
  100. 'post_author' => 3,
  101. 'post_name' => 'XMLRPC Test',
  102. 'post_content' => 'XMLRPC Test Content',
  103. 'custom_fields' => $custom_fields
  104. );
  105.  
  106. $res = $client -> query('wp.newPost',1, $usr, $pwd, $post_content);
  107. $postID = $client->getResponse();
  108. if(!$res) {
  109. $error = $client->getErrorCode().': '.$client->getErrorMessage();
  110. echo $error.'<br />';
  111. echo 'Something went wrong....';
  112. }
  113. else {
  114. echo 'The Project Created Successfully('.$res.')<br>Post ID is '.$postID.'<br>';
  115. }
  116.  
  117. // obrazek
  118. $img_attach_content2 = array(
  119. 'post_type' => 'attachment',
  120. 'post_status' => 'inherit',
  121. 'post_title' => $postID,
  122. 'post_name' => $postID,
  123. 'post_parent' => $postID,
  124. 'guid' => $image_returnInfo['url'],
  125. 'post_content' => '',
  126. 'post_mime_type' => 'image/jpg'
  127. );
  128.  
  129. $res2 = $client -> query('wp.editPost', 0, $usr, $pwd, $image_returnInfo['id'], $img_attach_content2);
  130.  
  131. $postIDimg = $client->getResponse();
  132.  
  133. // edycja postu
  134. $post_content2 = array(
  135. 'post_status' => 'publish', //publish
  136. 'wp_post_thumbnail' => $image_returnInfo['id'],
  137. 'custom_fields' => array( 'key' => '_thumbnail_id', 'value' => $image_returnInfo['id'] )
  138. );
  139. $media2= $client->query('wp.editPost',0, $usr, $pwd, $postID, $post_content2);
  140.  
  141. ?>



Dodam, że wszystko się ładnie wykonuję, obrazek jest uploadowany do Wordpress

Problem leży jedynie w aktualizacji postu i dodaniu do niego obrazka.

Także pewnie końcówka kodu...
andrew654
Hmm, trochę tego dużo do analizy. Nie wiem, czy post attachment to nie jest przypadkiem ikona postu, a nie obrazek w treści. Jak chcesz obrazek w treści, to pobierasz post do edycji i wklejasz kod osadzania obrazka w treści postu. Jak ikona postu to ona się wyświetla w template w miejscach do tego przewidzianych.
tomeknh
Problem rozwiązany,

zamiast:

'wp_post_thumbnail' => $image_returnInfo['id'],

miało być:

'post_thumbnail' => $image_returnInfo['id'],



w 136 linijce
andrew654
A to jednak miała być ikona postu wink.gif Myślałem że dodanie obrazka w treść
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.