Essayer d'utiliser admin-ajax.php
pour télécharger une image à partir d'un formulaire frontal. Je continue à obtenir 0
avec le code ci-dessous que j'ai et je ne suis pas sûr de savoir comment déboguer ceci ni où cela ne va pas.
J'ai un fichier d'entrée HTML
<input type="file" name="wh_image_upload" id="wh_image_upload" multiple="false" />
et script localisé pour la demande AJAX
$img_nonce = wp_create_nonce('image_upload_nonce');
wp_localize_script( 'ajax-script', 'ajax_image', array( 'ajax_url' => admin_url( 'admin-ajax.php' )) );
et PHP fonction
function write_here_featured_image_upload() {
var_dump($_FILES);
die();
}
add_action( 'wp_ajax_write_here_img_upload', 'write_here_featured_image_upload' );
add_action( 'wp_ajax_nopriv_write_here_img_upload', 'write_here_featured_image_upload' );
JS
// Featured image upload AJAX
$("#wh_image_upload").change(function(){
var userFile = new FormData();
var fileInput = $( "#wh_image_upload" )[0].files[0];
//console.log(fileInput);
userFile.append("file", fileInput);
userFile.append("action", "write_here_img_upload");
$.ajax({
type: "POST",
url: ajax_object.ajax_url,
data: userFile,
processData: false,
contentType: false,
error: function(jqXHR, textStatus, errorMessage) {
console.log(errorMessage);
},
success: function(data) {
console.log("Image Uploaded! " + data);
}
});
});
Je reçois un message de succès AJAX avec la réponse 0
. Image Uploaded! 0
Mise à jour J'ai mis à jour mon code de travail.
WordPress a des constantes définies dans wp-config.php
dans lesquelles vous pouvez imprimer les erreurs à l'écran et les enregistrer dans un fichier séparé situé /wp-content/debug.log
. Cela ressemble à ceci:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'WP_DEBUG_LOG', true );
Vous pouvez ensuite imprimer vos propres informations dans le journal de débogage à un moment donné et trouver exactement où (ou si la fonction est même activée), la fonction affiche une erreur:
function write_here_featured_image_upload() {
error_log( 'Made it into the Ajax function safe and sound!' );
/** ... Rest of your code ... **/
}
Presque tous les navigateurs de notre époque ont Outils de développement et une Console où les erreurs Javascrpit sont générées. Si vous voyez une erreur dans la console de vos outils de développement, vous devrez d'abord la réparer.
En ce qui concerne une solution possible, vous avez cette condition qui vous empêche d’exécuter ajax sur le front-end du site Web:
if ( is_admin() ) {
add_action( 'wp_ajax_write_here_img_upload', 'write_here_featured_image_upload' );
add_action( 'wp_ajax_nopriv_write_here_img_upload', 'write_here_featured_image_upload' );
}
La fonction is_admin()
indique à WordPress que only exécute ces actions à tout moment dans le panneau d'administration/le tableau de bord afin que rien ne se passe jamais sur le site Web de votre site Web. Essayez de supprimer le conditionnel et d’ajouter l’action telle quelle:
add_action( 'wp_ajax_write_here_img_upload', 'write_here_featured_image_upload' );
add_action( 'wp_ajax_nopriv_write_here_img_upload', 'write_here_featured_image_upload' );