WordPressでAJAXリクエストにHTMLを返信する正しい方法は何ですか?
私は現在これを持っています:
add_action( 'wp_ajax_nopriv_get-location-info', 'sc_locations_get_location_info' );
add_action( 'wp_ajax_get-location-info', 'sc_locations_get_location_info' );
function sc_locations_get_location_info() {
$nonce = $_POST['nonce'];
if ( ! wp_verify_nonce( $nonce, 'get-location-info-nonce' ) ) {
$response = json_encode( array( 'success' => false, 'error' => "Failed nonce check" ) );
} else {
$response = json_encode( array( 'success' => true, 'HTML' => '...LOTS OF WONDERFUL HTML...' ) );
}
header( "Content-Type: application/json" );
echo $response;
exit;
}
今はjson_encode()
を使っていますが、HTMLに対して何か他のことをするべきですか?生成されたHTMLは信頼できるので、ストリッピングを行う必要はありません。
どの種類のHTMLを期待しているかに応じて、使用できるツールが異なります。
esc_html()
は、HTMLブロック全体をエスケープするので、JSONオブジェクトリテラル内の文字が壊れてしまうことはありません。esc_html_e()
は(上記のように)エスケープし、そのコンテキスト内でのローカライズが心配な場合は文字列を翻訳します。wp_kses()
はHTML文字列を解析し、「悪」(明示的に許可されていない)タグを取り除きます。HTMLが完全に信頼されていれば、追加処理は必要ないと思いますが、理論的にはデータを分割して送信し、JS DOMを使用してHTMLを作成する方が良い場合があります。それを実行しています...そしてAJAXからもっと軽い帯域幅使用で単一の、おそらくもっと重いフロントロードをしたいのか、あるいはAJAXからのより重い複数の負荷でもっと軽いフロントアップをしたいのか。
あなたはWordPressネイティブを使用することができます - WP_Ajax_Response