WordPress : Le téléchargement de fichiers personnalisés WordPress est écrasé en l’absence de sélection de fichiers
Je travaille sur un thème personnalisé qui vous permet de télécharger plusieurs images sur une seule page. Comme j’ai plusieurs entrées de fichier, j’utilise cette fonction dans mon functions.php
fichier (à l’intérieur d’une boucle pour chaque entrée de fichier):
register_setting('hero', 'slider_slide_' . $i . '_image',
function($option) use ($i) {
if (!empty($_FILES['slider_slide_' . $i . '_image']['tmp_name'])) {
$_FILES['slider_slide_' . $i . '_image']['name'] = 'slide_' . $i . '.png';
$urls = wp_handle_upload($_FILES['slider_slide_' . $i . '_image'], array('test_form' => FALSE));
$temp = $urls['url'];
return $temp;
}
return $option;
});
La fonction en ligne est la seule chose que j’ai essayée qui fonctionne pour plusieurs fichiers à la fois. Quoi qu’il en soit, je suis maintenant confronté au problème de l’écrasement de mes options. Une fois téléchargée, l’option est définie dans ma base de données, avec le lien correct vers l’image. Cependant, si je modifie ultérieurement d’autres paramètres sur la page, puisque rien n’est téléchargé, l’option est remplacée par une chaîne vide, même si je vérifie que le fichier n’est pas vide avant de mettre à jour l’option.
Idéalement, j’aimerais permettre à un utilisateur de changer tout et n’importe quoi et de vérifier le téléchargement du fichier pour vérifier si quelque chose est sélectionné, et si c’est le cas, téléchargez et mettez à jour l’option.
Seul problème, WordPress semble s’occuper de la mise à jour des options…
Aucune erreur n’est lancée non plus, donc je suis totalement perplexe en ce moment.
Solution n°1 trouvée
Daniel G. au-dessus de cette réponse l’a à peu près résolu, j’ai dû l’ajuster un peu, mais pour le bien de tous ceux qui ont ce problème, voici le code que j’ai utilisé pour le résoudre.
register_setting('hero', 'slider_slide_' . $i . '_image',
function($option) use ($i) {
if ($_FILES['slider_slide_' . $i . '_image']['error'] != 0) {
return get_option('slider_slide_' . $i . '_image');
}
$_FILES['slider_slide_' . $i . '_image']['name'] = 'slide_' . $i . '.png';
$urls = wp_handle_upload($_FILES['slider_slide_' . $i . '_image'],
array(
'test_form' => FALSE,
'unique_filename_callback' => 'file_override_overwrite'
)
);
$temp = $urls['url'];
return $temp;
}
);
Solution n°2 trouvée
Je suppose que WP reçoit toujours vos entrées de fichiers vides, vous devez donc renvoyer la valeur stockée.
Essayez quelque chose comme ça.
register_setting('hero', 'slider_slide_' . $i . '_image',
function($value, $option) use ($i) {
if (empty($_FILES['slider_slide_' . $i . '_image']['tmp_name'])) {
return get_option($option);
}
$_FILES['slider_slide_' . $i . '_image']['name'] = 'slide_' . $i . '.png';
$urls = wp_handle_upload($_FILES['slider_slide_' . $i . '_image'], array('test_form' => FALSE));
return $urls['url'];
});
Une autre façon consiste à remplir 'slider_slide_' . $i . '_image'
l’entrée avec la valeur stockée.
0 commentaire