フロントエンドフォームから画像をアップロードするためにadmin-ajax.php
を使用しようとしています。私は以下のコードで0
を取得し続けていますが、これをデバッグする方法や問題が発生した場所がわからないのです。
HTML入力ファイルがあります
<input type="file" name="wh_image_upload" id="wh_image_upload" multiple="false" />
AJAX requestのローカライズされたスクリプト
$img_nonce = wp_create_nonce('image_upload_nonce');
wp_localize_script( 'ajax-script', 'ajax_image', array( 'ajax_url' => admin_url( 'admin-ajax.php' )) );
とPHP関数
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);
}
});
});
応答0
が付いたAJAX成功メッセージが表示されます。 Image Uploaded! 0
更新 作業コードを更新しました。
WordPressのwp-config.php
には定数が定義されています。ここでエラーを画面に表示し、それらを/wp-content/debug.log
という別のファイルに記録できます。それはこのように見えます:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'WP_DEBUG_LOG', true );
その後、特定の時点でデバッグログに独自の情報を出力して、関数がどこでエラーになっているのか(または関数がまったくヒットしていないのか)を正確に調べることができます。
function write_here_featured_image_upload() {
error_log( 'Made it into the Ajax function safe and sound!' );
/** ... Rest of your code ... **/
}
今日のほとんどすべてのブラウザには Developer Tools と Console があり、Javascrpitエラーが出力されます。 Dev Toolsコンソールにエラーが表示された場合は、まずそれを修正する必要があります。
考えられる解決策として、あなたはウェブサイトのフロントエンドでajaxを実行することを妨げているこの条件付きを持っています。
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' );
}
is_admin()
は、管理パネル/ダッシュボードでいつでもこれらのアクションをonly実行するようにWordPressに指示するので、あなたのウェブサイトのフロントエンドで何も起こらないのを見ることはないでしょう。条件を削除し、そのままアクションを追加してみてください。
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' );