首页 > 解决方案 > 在 wordpress API 中渲染元框

问题描述

我使用所见即所得的自定义元框创建了一个自定义帖子类型,我通过另一个网站上的 Wordpress API Rest 显示它。这是我在 API 中创建和显示自定义元框“任务”的函数:

add_action( 'add_meta_boxes', 'mission_metabox' );              
function mission_metabox() 
 {   
    add_meta_box('mission', 'Mission', 'mission_output', 'jobboard', 'normal', 'high');
 }

function mission_output( $post ) 
{
$mission_value=  get_post_meta($_GET['post'], 'mission' , true ) ;
wp_editor( htmlspecialchars_decode($mission_value), 'mission-facts', 
$settings = array('textarea_name'=>'mission-facts') );
}

function save_mission( $post_id ) 
{                   
 if (isset($_POST['mission-facts']))
    {
    $data=htmlspecialchars($_POST['mission-facts']);
    update_post_meta($post_id, 'mission', $data );
    }
 }
add_action( 'save_post', 'save_mission' ); 

// add meta box to API
add_action( 'rest_api_init', 'slug_register_mission' );
 function slug_register_mission() {
   register_rest_field( 'jobboard',
     'mission',
      array(
        'get_callback'    => 'slug_get_mission',
        'update_callback' => null,
        'schema'          => null,
    )
);
}
function slug_get_mission( $object, $field_name, $request ) {
 return get_post_meta( $object[ 'id' ], $field_name, true );
}

这是我在我的 API ( http://website.com/wp-json/wp/v2/custom-post-type-api ) 中得到的内容:

"mission": "<span style="color: #ff9900;"><b>my test in orange!</b></span>",

这是前端显示的内容:

<span style="color: #ff9900;"><b>my test in orange!</b></span>

我想要的是 我的橙色测试!(显然是粗体和橙色)

我找到了这个函数来呈现内容,但我不知道如何为我的元框修改它:

add_action( 'rest_api_init', function ()
{
register_rest_field(
      'page',
      'content',
      array(
             'get_callback'    => 'compasshb_do_shortcodes',
             'update_callback' => null,
             'schema'          => null,
      )
   );
});

function compasshb_do_shortcodes( $object, $field_name, $request )
{
   WPBMap::addAllMappedShortcodes(); // This does all the work

   global $post;
   $post = get_post ($object['id']);
   $output['rendered'] = apply_filters( 'the_content', $post->post_content );

   return $output;
 }

任何帮助将不胜感激!

///////// * 编辑 * //////////////

我设法通过更改上面的函数来呈现我的自定义框:

function slug_get_mission( $object, $field_name, $request ) {
   WPBMap::addAllMappedShortcodes(); // This does all the work
   $mission=get_post_meta( $object[ 'id' ], $field_name, true );
   $output['rendered'] =  apply_filters( the_content, $mission );
   return $output;
}

现在我的 API 显示:

"mission": {
  "rendered": <p>&lt;span style=&quot;color: #ff9900;&quot;&gt;&lt;b&gt;my test in orange!&lt;/b&gt;&lt;/span&gt;</p>\n
 },

前端显示:

<span style="color: #ff9900;"><b>my test in orange!</b></span>

所以我想它与渲染无关,但编码可能?

标签: wordpressrestmeta-boxes

解决方案


是的,找到了一种方法,忘记函数,它与渲染无关。一个简单的 html_entity_decode() 就可以了。


推荐阅读