为什么‘DO_SHORTROAD’在REST请求中不起作用?

时间:2016-04-27 作者:Jordane CURE

为什么?do_shortcode 在休息通话中不起作用?

在下面的示例中,do_shortcode 存在,但不会解释短代码。

路线声明

/*
       Adding a route with callback is interpret_shortcode function
*/
add_action( \'rest_api_init\', function ()
{
       register_rest_route(
              \'test\',
              \'/someContent\',
              array(
                 \'methods\' => \'GET\',
                 \'callback\' => \'interpret_shortcode\'
              )
       );
} );

短码调用

function interpret_shortcode( $data )
{
   $content;

   if ( function_exists( \'do_shortcode\' ) )  
   {
           $content = do_shortcode("[et_pb_text] abc [/et_pb_text]");
   } 
   else {
          $content = "do_shortcode is missing";
   }

   return array(\'content\'=>$content); //Output "[et_pb_text] abc [/et_pb_text]"
}
在休息通话中,我们的情况是否与所描述的情况相同here 关于Ajax请求?

2 个回复
最合适的回答,由SO网友:Jordane CURE 整理而成

解决方案我找到了解决此问题的方法。我把它贴给子孙后代。

这是divi和restapi之间的一个问题,几个问题。

在下面的示例中,register_rest_field 是用来代替register_rest_route, 但修复对这两种方法都有效。

这种解决方案不可能非常适合未来。但是,至少在Divi Builder或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;
}

SO网友:Mark Kaplun

插件在代码的任何地方定义的短代码的可用性都是未定义的,除了(甚至可能是)单一内容。

在大多数情况下,在该上下文之外,最好使用适用的参数调用实现它的函数,而不是“解析”短码。

相关推荐

我可以将参数传递给Add_ShortCode()函数吗?

正如标题所述,我需要向add_shortcode() 作用换句话说,我传递的那些参数将在的回调函数中使用add_shortcode(). 我该怎么做?请注意,这些与以下结构无关[shortcode 1 2 3] 哪里1, 2, 和3 是用户传递的参数。在我的情况下,参数仅用于编程目的,不应由用户负责。谢谢