web-dev-qa-db-ja.com

admin-ajax.phpは0を返します。デバッグして修正するにはどうすればよいですか?

フロントエンドフォームから画像をアップロードするために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

更新 作業コードを更新しました。

4
Ohsik

デバッグを有効にする

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 ToolsConsole があり、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' );
5
Howdy_McGee