После перекрестной проверки с основными файлами WordPress единственное, что, по-видимому, отсутствует - это wp_update_attachment_metadata
сразу после wp_generate_attachment_metadata
.
Попробуйте добавить
wp_update_attachment_metadata($attach_id, $attach_data);
после
echo "...success for $my_moved_file: ID:$attach_id<br />\n";
Таким образом, блок if выглядит следующим образом:
if ($attach_data = wp_generate_attachment_metadata( $attach_id, $my_moved_file)) {
echo "...success for $my_moved_file: ID:$attach_id<br />\n";
wp_update_attachment_metadata($attach_id, $attach_data);
} else {
echo "...FAILED for $my_moved_file ID:$attach_id<br />\n";
print_r($attach_data);
}
Предложение: (не относится к вопросу)
переместить строку
require_once(ABSPATH . 'wp-admin/includes/image.php');
вне (над) цикла for.
ОБНОВЛЕНИЕ 1: добавление предложения по устранению проблемы с копированием.Вы пропустили строку "проверить тип файла".(Функция копирования PHP не будет работать, если целевой файл ($my_moved_file
) уже существует)
Изменить этот код
// copy the file to the upload dir
$uploads = wp_upload_dir();
$file_to_move = ABSPATH."wp-content/uploads/".$stock_img;
if (copy($file_to_move, $uploads['path']."/")) {
echo "Moved $file_to_move to ".$uploads['path']."/";
$my_moved_file = $uploads['path']."/".$stock_img;
// I think this is failing because the images aren't in the upload dir.
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($stock_img)),
'post_content' => '',
'post_status' => 'inherit'
);
TO
// copy the file to the upload dir
$uploads = wp_upload_dir();
$file_to_move = ABSPATH."wp-content/uploads/".$stock_img;
$my_moved_file = $uploads['path']."/".$stock_img;
if (copy($file_to_move, $my_moved_file)) {
echo "Moved $file_to_move to ".$my_moved_file;
// Check the file type
$wp_filetype = wp_check_filetype(basename($my_moved_file), null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($my_moved_file)),
'post_content' => '',
'post_status' => 'inherit'
);