Рендеринг метабокса в WordPress API отдыха - PullRequest
0 голосов
/ 23 сентября 2018

Я создал пользовательский тип записи с помощью пользовательского мета-поля wysiwyg, которое я отображаю через 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>

Так что я думаю, это не имеет ничего общего с рендерингом, но кодирование может быть

1 Ответ

0 голосов
/ 23 сентября 2018

ага, нашел способ, забудь функцию, она не имеет ничего общего с рендерингом.Простой html_entity_decode () добился цели.

...