web-dev-qa-db-ja.com

PHP admin-ajax.phpからのエラーWordpress 4.9+

さまざまなことを行うカスタムエンドポイントがいくつか設定されており、/wp/wp-admin/admin-ajax.php?action=some_actionを介してアクセスします。

ただし、構文、論理、致命的など、開発中にエラーが発生すると、ブラウザでページを表示すると「500 InternalServerError」が発生します。

エラーが発生した場合、サイト上の他のすべてのページでPHPエラーが発生し、デバッグに役立ちます。

ただし、エラーがadmin-ajax.php領域から発生した場合は、代わりにPHPログファイルを開いてエラーを確認する必要があります。これは、積極的に開発する場合はさらに面倒です。

wordpressに、このURL名前空間でのエラーの表示を無効にするものはありますか?もしそうなら、ブラウザでエラーをレンダリングできるようにこれを防ぐにはどうすればよいですか?

6
Owen

enter image description here ajaxの使用時にPHPエラーが表示される場合は、wp-includes/load.phpファイルを開き、336行目で次の行を変更します。

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
        @ini_set( 'display_errors', 0 );
    }

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
        @ini_set( 'display_errors', 1 );
    }

これで、ブラウザコンソールでajaxエラーを確認できるようになります。デバッグが終了したら、これを元に戻すことを忘れないでください!

11
kb.

https://codex.wordpress.org/Debugging_in_WordPress

_ // Enable WP_DEBUG mode
define( 'WP_DEBUG', true );

// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );

// Disable display of errors and warnings 
define( 'WP_DEBUG_DISPLAY', false );
_

次の定数をそのように定義します。 _debug.log_の下に_wp-content_が表示されます。ヘッダーがすでに送信されている問題が発生するため、通常はデバッグ表示もオフのままにします。

編集:

そのため、_wp-includes/load.php_のメソッドwp_debug_mode()の最後の行でajaxリクエストのエラーレポートがオフになっているようです。

_if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
        @ini_set( 'display_errors', 0 );
    }
_
0
TurtleTread