Obtenga salida HTML sin procesar de la API REST de WordPress

3 minutos de lectura

estoy usando el API REST de WordPress para obtener el contenido HTML de mi página de WordPress en una aplicación externa. Llamo a este mysite/wp-json/wp/v2/pages/10 y devuelve:

"content": {
  "rendered": "[vc_column_text]Hello World[/vc_column_text]"
}

¿Hay alguna forma de devolver el código en su salida HTML final y sin el [vc_] códigos cortos, por ejemplo: <p>Hello World</p>

Los códigos cortos provienen del Complemento de creación de páginas de Visual Composer.

  • Tener el mismo problema aquí. He estado tratando de usar un filtro de contenido para transformarlo a HTML. También publiqué en el foro de soporte, así que espero obtener una respuesta allí o aquí. 🙂 Publicación en el foro de soporte de la API REST de WP

    – Raquel Cantor

    12/04/2016 a las 17:13

avatar de usuario
muka.gergely

Encontrado y respuesta aquí: https://github.com/CompassHB/web/issues/67#issuecomment-245857301

El siguiente ejemplo está tomado del enlace anterior:

/**
 * Modify REST API content for pages to force
 * shortcodes to render since Visual Composer does not
 * do this
 */
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 );

   // EDIT: add custom CSS to $output:
   $output[ 'yb_wpb_post_custom_css' ] = get_post_meta( $object[ 'id' ], '_wpb_post_custom_css', true);

   return $output;
}

EDITAR

Surgió una pregunta en un comentario: ¿Cómo obtener el conjunto de CSS personalizado para una página (publicación, etc.)? Modifiqué el código de muestra de una manera que agrega el CSS personalizado a la respuesta de la API REST. Encontrarás el CSS en content/yb_wpb_post_custom_css.

La otra forma es agregar otro campo a la respuesta de la API REST que contenga este CSS. La clave es que el CSS personalizado establecido para una página/publicación/etc. tiene una clave meta _wpb_post_custom_css.

  • ¿Cómo obtengo el CSS, el resto de la API no tiene CSS de Visual Composer?

    usuario10090131

    19 de septiembre de 2019 a las 8:32

  • @GeorgeAlvis: modifiqué mi respuesta para que ahora le brinde una respuesta REST con el CSS personalizado. WPB almacena el CSS personalizado en un metano en el contenido, por eso no lo obtuviste con la solicitud de contenido. meta Sin embargo, se pueden agregar uno por uno, eso es lo que hice.

    – muka.gergely

    19 de septiembre de 2019 a las 10:13


  • $output['rendered'] = apply_filters( 'the_content', get_the_content()); gracias por la respuesta, estoy recuperando el contenido de la página de la línea anterior, pero ahora también quiero el CSS de la página en la API, no en el CSS personalizado. Cómo lo hago ? AIT

    usuario10090131

    19 sep 2019 a las 10:51


  • Está en el EDITAR sección de la respuesta – agregue un nuevo campo a contenidoo agregue un nuevo campo a la respuesta REST.

    – muka.gergely

    19 sep 2019 a las 10:51


  • No estoy usando CSS personalizado, pero espero que el CSS del elemento del compositor visual esté disponible en la API. @muka.gergely

    usuario10090131

    19 de septiembre de 2019 a las 10:53

Aproximadamente 2 años tarde a la fiesta, sin embargo, lo siguiente funcionó para mí:

$output['rendered'] = apply_filters( 'the_content', get_the_content() );

Por si acaso alguien se lo preguntaba.

  • ¿Cómo se suponía que iba a funcionar esto para ti? ¿Agregaste algún filtro? No es claro.

    – DrLightman

    25 oct 2021 a las 13:46


  • No agregué ningún filtro, solo estaba obteniendo el texto de db y tratando de obtener html sin procesar sin los códigos cortos …

    – Nachiket Namjoshi

    28 de octubre de 2021 a las 6:12

¿Ha sido útil esta solución?