How to add language-aware data to your own custom REST API endpoints.
Adding Language Fields to Custom Endpoints
php
/**
* Register a custom REST endpoint that returns language-aware data.
*/
add_action('rest_api_init', function () {
register_rest_route('mytheme/v1', '/content/(?P<lang>[a-z]{2})', [
'methods' => 'GET',
'callback' => function (WP_REST_Request $request) {
$lang = $request->get_param('lang');
$languages = lf_get_languages();
if (!isset($languages[$lang])) {
return new WP_Error('invalid_language', 'Language not found', ['status' => 404]);
}
$posts = get_posts([
'post_type' => 'post',
'posts_per_page' => 10,
'meta_key' => '_lf_language',
'meta_value' => $lang,
]);
$data = [];
foreach ($posts as $post) {
$translations = lf_get_post_translations($post->ID);
$data[] = [
'id' => $post->ID,
'title' => $post->post_title,
'language' => $lang,
'translations' => $translations,
'permalink' => get_permalink($post->ID),
];
}
return rest_ensure_response($data);
},
'permission_callback' => '__return_true',
]);
});php
add_action('rest_api_init', function () {
register_rest_route('mytheme/v1', '/strings/(?P<lang>[a-z]{2})', [
'methods' => 'GET',
'callback' => function (WP_REST_Request $request) {
$lang = $request->get_param('lang');
// Temporarily switch to the requested language
global $wpdb;
$strings = $wpdb->get_results($wpdb->prepare(
"SELECT string_name, string_value FROM {$wpdb->prefix}lf_strings
WHERE string_domain = %s AND string_language = %s",
'theme', $lang
));
$result = [];
foreach ($strings as $s) {
$result[$s->string_name] = $s->string_value;
}
return rest_ensure_response($result);
},
'permission_callback' => '__return_true',
]);
});—