Obtener idioma de un post de WordPress usando el API de WordPress

Tiempo de lectura: 2 minutos

Hola, si necesitamos obtener el idioma con el que se ha creado un POST en WordPress usando la API de WordPress tenemos que añadir un código extra, ya que por defecto no obtiene el idioma con el que se ha creado el POST.

En el caso de plugins como Polylang, almacena la información del idioma del post pero luego no lo muestra en el API de WordPress.

Para solucionarlo, tenemos que añadir este código.

  1. Ir a functions.php
  2. Añadir esta función:
	function custom_rest_prepare_post($response, $post, $request) {
    // Obtener el idioma del post utilizando la consulta SQL
    global $wpdb;
    $language = $wpdb->get_var($wpdb->prepare("
        SELECT wp_terms.slug
        FROM {$wpdb->posts} AS wp_posts
        JOIN {$wpdb->term_relationships} AS wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
        JOIN {$wpdb->terms} AS wp_terms ON (wp_term_relationships.term_taxonomy_id = wp_terms.term_id)
        JOIN {$wpdb->term_taxonomy} AS wp_term_taxonomy ON (wp_terms.term_id = wp_term_taxonomy.term_id)
        WHERE wp_posts.ID = %d
        AND wp_term_taxonomy.taxonomy = 'language'
    ", $post->ID));

    // Agregar el idioma al objeto de respuesta
    $response->data['language'] = $language;

    return $response;
}
add_filter('rest_prepare_post', 'custom_rest_prepare_post', 10, 3);

En este código, estamos utilizando el filtro rest_prepare_post para interceptar la respuesta de la API de WordPress antes de que se envíe al cliente. Luego, ejecutamos la consulta SQL dentro de la función custom_rest_prepare_post para obtener el idioma del post utilizando la clase $wpdb, que proporciona una interfaz para interactuar con la base de datos de WordPress.

Finalmente, agregamos el idioma obtenido al objeto de respuesta utilizando la clave 'language'.

Una vez que hayas agregado este código a tu archivo functions.php o a tu plugin personalizado, al realizar una solicitud a la API de WordPress para obtener los posts, se incluirá el campo 'language' en la respuesta junto con los demás datos del post.

Ahora, al realizar la solicitud a la API de WordPress nos devuelve lo siguiente:

"tags": [
        1528,
        1012,
        826,
        1525,
        1527,
        819,
        1538,
        813,
        1526,
        1524,
        1543,
        1541
    ],
    "language": "es",

Y como podemos observar, ahora sí que incluye el language.

Deja un comentario