Wp_send_json_errorがエラーメッセージを返すしくみを理解できません。どのエラー条件も満たされない限り、問題なく機能します。ただし、エラーがある場合は何も返されません。
エラーが発生した場合、wp_send_json_error()
で設定したエラーメッセージを返すにはどうすればよいですか?
私のコードを参照してください:
function submit_youtube_callback() {
check_ajax_referer( 'randomnonce', 'security' );
if ( !isset($_POST['post_id']) ||
!is_numeric($_POST['post_id']) ||
!get_post_status($_POST['post_id']) ||
!isset($_POST['yt_url']) ||
!isset($_POST['terms'])
) {
wp_send_json_error( 'Error: Invalid data!' );
}
// Check if terms are checked
$terms = $_POST['terms'];
if ( $terms != true ) {
wp_send_json_error( 'Error: You must accept the terms.' );
}
// Check if valid youtube URL
$youtube_url = $_POST['yt_url'];
$preg = '~^(?:https?://)?(?:www\.)?(?:youtube\.com|youtu\.be)/watch\?v=([^&]+)~x';
$has_match = preg_match($preg, $youtube_url, $matches);
if ( empty($matches[1]) ) {
wp_send_json_error( 'Error: You did not enter a valid YouTube URL.');
}
echo '<p>youtube: '. $youtube_url .'</p>';
echo '<p>terms accepted: ' . $terms .'</p>';
wp_die();
} add_action( 'wp_ajax_cp_narrations_callback', 'submit_youtube_callback' );
そしてJavaScript:
function submit_youtube_javascript() {
if ( is_single() ) {
$ajax_nonce = wp_create_nonce( "randomnonce" );
?>
<script>
( function( $ ) {
var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>",
submit_youtube = $('#submitYouTubeForm');
// Star rating button
$(submit_youtube).on('submit', function(event) {
event.preventDefault();
var submit_youtube_url = $('#submitYouTubeURL').val(),
submit_youtube_terms = $('#youtube_terms').is(':checked');
// Data to be sent to function
var data = {
'action': 'submit_youtube_callback',
'security': '<?php echo $ajax_nonce; ?>',
'post_id': <?php echo get_the_ID(); ?>,
'yt_url': submit_youtube_url,
'terms': submit_youtube_terms
};
// Send Data
jQuery.post(ajaxurl, data, function(response) {
submit_youtube.replaceWith(response);
});
});
} )( jQuery );
</script>
<?php
}
} add_action( 'wp_footer', 'submit_youtube_javascript', 100 );
wp_send_json_error( 'Error: Invalid data!' )
JSON文字列をエコーします:_{"success":false,"data":"Error: Invalid data!"}
_
wp_send_json_error()
のいいところは、パラメータが_WP_Error
_オブジェクトになることです。
このJSON文字列をエコーする wp_send_json_success( 'Everything okay.' )
とは対照的に:_{"success":true,"data":"Everything okay."}
_
どちらも内部的に wp_send_json()
を使用してJSONデータを適切にエコーし、その後die()
を使用します。
ただし、エラーがある場合は何も返されません。
実は、今は信じられません。しかし、JSコードを調べると、JSON応答を適切に処理できません。実際にすべてが正常に機能すると、$('#submitYouTubeForm')
を置き換えるHTMLを返します。しかし、JSON応答では、HTMLではなくJSON応答があります。
実際にJSON文字列を取得できない場合は、console.log( response )
を使用して確認してください。すべての応答にJSONを使用するか、wp_send_json_error()
を使用する代わりに、プレーンHTMLエラーメッセージとdie()
を自分で返すことを検討してください。