WP REST API: ¿Cómo cambiar el código de estado de respuesta HTTP?

2

Tengo un punto final personalizado donde quiero cambiar el estado de respuesta HTTP a 404 en ciertos escenarios (por ejemplo, la publicación no existe). ¿Cómo puedo hacer eso? Aquí hay un ejemplo de punto final personalizado:

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 ];
}

¿Cómo puedo cambiar el código de respuesta en esta función?

    
pregunta Gasim 21.01.2017 - 20:08

2 respuestas

5

Puede devolver un objeto WP_Error en el que define el código de estado. Aquí hay un fragmento de la documentación de la API REST :

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;
}

En tu caso, podrías hacer algo como:

return new WP_Error( 'page_does_not_exist', __('The page you are looking for does not exist'), array( 'status' => 404 ) );
    
respondido por el RRikesh 22.01.2017 - 03:41
0

La forma más sencilla es hacer esto:

return new WP_REST_Response(null, 404);

Nota: esta sigue siendo una respuesta JSON que contiene null como cuerpo. Tendría que engancharse a los filtros de salida de resto y cambiarlo a text/plain o algo para no generar nada.

    
respondido por el Walf 21.08.2018 - 11:38

Lea otras preguntas en las etiquetas