wordpress - 在 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><span style="color: #ff9900;"><b>my test in orange!</b></span></p>\n
},
前端显示:
<span style="color: #ff9900;"><b>my test in orange!</b></span>
所以我想它与渲染无关,但编码可能?
解决方案
是的,找到了一种方法,忘记函数,它与渲染无关。一个简单的 html_entity_decode() 就可以了。
推荐阅读
- r - 如何使用 R 中另一个变量的分位数创建一个变量?
- nuxt.js - 使用 storyblok 和 nuxt 设置可视化编辑器
- html - 为什么我的弹性项目中 div 的高度如此之小?
- ios - 我们能否将 main.swift 文件重命名为 Main.swift(大写)
- vapor - 在 Fluent 迁移中为新的必填字段设置默认值
- php - Laravel API 覆盖默认 413 Payload Too Large 响应
- airflow - 使用 xcom_pull 拉取相同任务推送的键值 - Airflow
- asp.net-core - 使用存储在数据库中的证书进行 Saml 请求签名
- python - Docker 映像在 AWS ECR 上的行为不同
- angular - 卡在谷歌地图(角度)