Как вставить изображение в медиа-каталог и вставить данные поста для этого изображения - PullRequest
0 голосов
/ 07 декабря 2018
  • Я хочу вставить изображение из папки плагинов в медиа-библиотеку.(сделайте копию в папке загрузки и вставьте сообщение в базу данных)
  • Когда я захожу в админ-панель Wordpress, я хочу видеть файл на вкладке мультимедиа, как и любое другое изображение.

Не думаю, что правильно копирую файл.потому что, если я пропущу URL в своем браузере, он вернется пустым, но если я скачаю тот же файл, мой компьютер будет в порядке с ним.

Вторая проблема - я пропускаю детали в мета-записи этого изображения, а именно массивдля _wp_attachment_metadata - я не уверен, как сгенерировать это .. или как создать размеры изображения, которые генерирует wordpress для изображения.

код;

$TheImage='Vodacom.jpg';
$TheDir='images/Vodacom.jpg';
$TheImageName='Vodacom';
$image_url = plugins_url( $TheDir, __FILE__ );
$mySanitizedName = strtolower(str_replace(" ","-",$TheImageName));

$uploaddir = wp_upload_dir();
$uploadfile = $uploaddir['path'] . '/' . $TheImage;

$contents= file_get_contents($image_url);
$savefile = fopen($uploadfile, 'w');
fwrite($savefile, $contents);
fclose($savefile);

$New_image_url = $uploaddir['url']. '/' . $TheImage;

$post_data = array(
        'post_author'   => '1',
        'post_name'     => $mySanitizedName,
        'post_title'    => $TheImageName,
        'post_content'  => '',
        'post_excerpt'  => '',
        'post_status'   => 'publish',
        'ping_status'   => 'closed',
        'post_type'     => 'attachment',
        'post_mime_type'     => 'image/jpeg',
        'guid'          =>  $New_image_url ,
    );

$image_Id = wp_insert_post( $post_data );
update_post_meta( $image_Id, '_wp_attached_file', '2018/12/'.$TheImage );

РЕДАКТИРОВАТЬ:

Я исправил оставшуюся часть вставленного сообщения, я могу видеть большой палец в окне мультимедиа, однако я все еще думаю, что моя копия файла неверна, потому что если ящелкните большим пальцем, и новое окно, открывающее файл изображения, будет пустым.

Итак, мой метод копирования файлов неправильный, может кто-то указать, почему?

новый код добавлен к существующему:

require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $image_Id, $uploadfile );
$res1= wp_update_attachment_metadata( $image_Id, $attach_data );

показ большого пальца: большой палец

окно при открытии большого пальца: окно

1 Ответ

0 голосов
/ 07 декабря 2018

Итак, я наконец-то выяснил свои проблемы ... Проблема, связанная с тем, что моя копия файла не работает должным образом, заключается в том, что на некоторых серверах (например, на моем) некоторые функции php могут быть установлены в false по умолчанию, теперь, поскольку мой код предназначен дляПлагин, я не могу ожидать, чтобы изменить настройки сервера, поэтому альтернативой, которая работала, было использование curl.

Полный код ниже с новой копией файла curl:

$TheImage='Vodacom.jpg';
$TheDir='images/Vodacom.jpg';
$TheImageName='Vodacom';
$image_url = plugins_url( $TheDir, __FILE__ );
$mySanitizedName = strtolower(str_replace(" ","-",$TheImageName));

$uploaddir = wp_upload_dir();
$uploadfile = $uploaddir['path'] . '/' . $TheImage;

// Here is the new curl way of copying a file..
$ch = curl_init($image_url);
$fp = fopen($uploadfile, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

$New_image_url = $uploaddir['url']. '/' . $TheImage;

$post_data = array(
    'post_author'   => '1',
    'post_name'     => $mySanitizedName,
    'post_title'    => $TheImageName,
    'post_content'  => '',
    'post_excerpt'  => '',
    'post_status'   => 'publish',
    'ping_status'   => 'closed',
    'post_type'     => 'attachment',
    'post_mime_type'     => 'image/jpeg',
    'guid'          =>  $New_image_url ,
);

$image_Id = wp_insert_post( $post_data );
update_post_meta( $image_Id, '_wp_attached_file', '2018/12/'.$TheImage );
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $image_Id, $uploadfile );
$res1= wp_update_attachment_metadata( $image_Id, $attach_data );

Я радЯ получил это, чтобы работать, не идеальный способ, я полагаю, но это работает так ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...