#php #wordpress
#php #wordpress
Вопрос:
Мой код для создания поля CMB2
$cmb->add_field( array(
'name' => 'Qualification List',
'desc' => 'Candidate qualifications',
'id' => 'qualification_file_list',
'type' => 'file_list',
'preview_size' => arraay( 100, 100 ), // Default: array( 50, 50 )
'text' => array(
'add_upload_files_text' => 'Upload Qualifications', // default: "Add or Upload Files"
'remove_image_text' => 'Remove Image', // default: "Remove Image"
'file_text' => 'File', // default: "File:"
'file_download_text' => 'Download', // default: "Download"
'remove_text' => 'Remove', // default: "Remove"
),
) );
HTML-код
<div class="form-group">
<label for="avatar">Upload your certificates:</label>
<input type="file" id="qualifications" name="qualifications[]" accept="image/png, image/jpeg" multiple><br>
<?php wp_nonce_field( 'qualifications', 'my_image_upload_nonce' ); ?>
<span class="qualification-error-message"></span>
</div>
Мой код для загрузки изображений в медиатеку и прикрепления изображений к списку файлов CMB2
if ( ! empty( $_FILES['qualifications'] ) ) {
$files = $_FILES['qualifications'];
$new_file_img = [];
foreach ($files['name'] as $key => $value){
if ($files['name'][$key]){
$file = array(
'name' => $files['name'][$key],
'type' => $files['type'][$key],
'tmp_name' => $files['tmp_name'][$key],
'error' => $files['error'][$key],
'size' => $files['size'][$key]
);
}
$_FILES = array("qualifications" => $file);
$i=1;
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
foreach ($_FILES as $file => $array) {
if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) __return_false();
$attachment_id = media_handle_upload($file, $acceptanceId);
$new_file_img = wp_get_attachment_image( $attachment_id );
$i ;
}
echo $new_file_img;
update_post_meta($acceptanceId, 'qualification_file_list', $new_file_img);
}
}
Мне удалось загрузить файлы в медиатеку WordPress, где говорится, что файл был загружен в сообщение, но файл не привязан к типу поля.
загрузка изображений с использованием приведенного выше кода
Ответ №1:
решение таково :
Массив :
$files[$attach_id] = $movefile["url"];
и обновите следующим образом :
update_post_meta( $post_id, 'gallery', $files);
Я нашел решение здесь https://github.com/CMB2/CMB2/issues/1321
Ответ №2:
Итак, что вы можете сделать здесь, это в основном собрать все загруженные изображения в массив с ключом в качестве идентификатора вложения и значением в качестве URL-адреса изображения, а затем обновить post_meta. Также может быть целесообразно сгенерировать метаданные для изображения сразу после завершения загрузки изображения, поскольку я предполагаю, что wordpress не будет автоматически генерировать метаданные для изображения в этом случае.
Таким образом, ваш код может выглядеть так:
$files = $_FILES['qualifications'];
$gallery_images = array();
if (!empty($files)) {
$directory = wp_upload_dir();
foreach ($files as $key => $file) {
$new_file_mime = mime_content_type($files['tmp_name'][$key]);
if (!in_array($new_file_mime, get_allowed_mime_types())) {
return; //invalid file format
} else {
$file_path = $directory['path'] . '/' . $files['name'][$key];
}
require_once(ABSPATH . 'wp-admin/includes/image.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
if (move_uploaded_file($files['tmp_name'][$key], $file_path)) {
$attach_id = wp_insert_attachment(
array(
'guid' => $file_path,
'post_mime_type' => $new_file_mime,
'post_title' => preg_replace('/.[^.] $/', '', $files['name'][$key]),
'post_content' => '',
'post_status' => 'inherit',
'post_author' => $user->ID,
),
$file_path,
0,
true
);
$image_added = array(
$attach_id => $directory['url'] . '/' . $files['name'][$key],
);
wp_generate_attachment_metadata($attach_id, $file_path);
$gallery_images = $image_added;
}
}
}
update_post_meta($acceptanceId, 'qualification_file_list', $gallery_images);