J'ai un point de terminaison personnalisé où je veux changer le statut de réponse HTTP à 404 dans certains scénarios (par exemple, la publication n'existe pas). Comment puis je faire ça? Voici un exemple de point de terminaison personnalisé:
function af_news_single( \WP_REST_Request $data ) {
global $wpdb;
$year = (int) $data['year'];
$month = (int) $data['month'];
$day = (int) $data['day'];
$slug = $data['slug'];
$date = "{$year}-{$month}-{$day}";
$news = $wpdb->get_row(
$wpdb->prepare(
"SELECT
DATE_FORMAT(post_date, %s) as `post_date`,
`post_title`,
`post_name`,
`post_content`
FROM {$wpdb->posts}
WHERE
`post_status` = 'publish' AND
`post_type` = 'post' AND
`post_name` = %s AND
`post_date` BETWEEN %s AND %s + INTERVAL 1 DAY
LIMIT 1
", '%Y-%m-%dT%TZ', $slug, $date, $date
)
);
if ( $news ) {
$news->post_title = qtranxf_translate( $news->post_title );
$news->post_content = wpautop( qtranxf_translate( $news->post_content ) );
} else { /* How to change response code? */ }
return [ 'data' => $news ];
}
Comment puis-je changer le code de réponse dans cette fonction?
Vous pouvez renvoyer un objet WP_Error
dans lequel vous définissez le code d'état. Voici un extrait de le REST documentation de l'API :
function my_awesome_func( $data ) {
$posts = get_posts( array(
'author' => $data['id'],
) );
if ( empty( $posts ) ) {
return new WP_Error( 'awesome_no_author', 'Invalid author', array( 'status' => 404 ) );
}
return $posts[0]->post_title;
}
Dans votre cas, vous pourriez faire quelque chose comme:
return new WP_Error( 'page_does_not_exist', __('The page you are looking for does not exist'), array( 'status' => 404 ) );
Le moyen le plus simple est de faire ceci:
return new WP_REST_Response(null, 404);
Remarque: il s'agit toujours d'une réponse JSON contenant null
en tant que corps. Vous devrez vous connecter aux filtres de sortie restants et le changer en text/plain
ou quelque chose pour ne rien produire.