Solution
I find a workaround for this issue. I post it for posterity.
This is an issue, several issue, between divi and REST Api.
In the exemple bellow, register_rest_field
is used instead of register_rest_route
, but the fix is valid for both method.
This solution could not be very futureproof. But, at least, their is no modification inside Divi Builder or Rest API.
/*
Edit Rest call
*/
add_action( 'rest_api_init', function ()
{
register_rest_field(
'page',
'content',
array(
'get_callback' => 'duo_get_divi_content',
'update_callback' => null,
'schema' => null,
)
);
});
function duo_get_divi_content( $object, $field_name, $request )
{
//Set is_singular to true to ovoid "read more issue"
//Issue come from is_singular () in divi-builder.php line 73
global $wp_query;
$wp_query->is_singular = true;
//Set divi shortcode
//The 2 function bellow are define in 'init' but they are call in 'wp'
//REST Api exit after 'parse_request' hook, it's before 'wp' so divi's shortcode are not set
et_builder_init_global_settings ();
et_builder_add_main_elements ();
//Define $post, if not defined, divi will not add outter_content and inner_content warper
//Issue come from get_the_ID() in divi-builder.php line 69
global $post;
$post = get_post ($object['id']);
//Apply the_content's filter, one of them interpret shortcodes
$output = apply_filters( 'the_content', $post->post_content );
return $output;
}