Programación

Eliminar shortcodes de los resultados de la REST-API de WordPress

El otro día, conectando una tienda WooCommerce a Arise, que todos conoceréis por su marca comercial Miravia que ahora tiene bastante publicidad, me vi con el siguiente problema:

  • es una web con un constructor basado en shortcodes (esto os puede pasar con WP Bakery Page Builder for WordPress o con Divi)
  • el plugin de Miravia, Arise, usa internamente la REST-API y al enviar la descripción del producto utiliza el contenido que está lleno de shortcodes
  • como resultado, el producto al importarlo en Miravia se veía lleno de shortcodes, así que imaginad el resultado

Por suerte, como intuí por el código del plugin que de alguna manera usaba la REST-API de WooCommerce, vi que la solución podía ser sencilla. Se trataba de filtrar la salida de la REST-API, de forma que al leer el objeto producto, nosotros interviniéramos en medio para evitar que aparecieran los shortcodes.

Hay varios hooks que podríamos usar pero el que elegí, por considerarlo el más adecuado, es woocommerce_rest_prepare_product_object que recibe tres parámetros: la respuesta a enviar, el objeto del producto y la petición.

La función a implementar básicamente:

  • Obtiene el contenido del post asociado al producto, que es donde se guarda la descripción
  • Con una expresión regular elimina los shortcodes
  • Aplicamos el filtro the_content por si hay algo más que deba convertirse en HTML antes de enviarse a la respuesta

Algo tan sencillo como este pequeño código que debéis incluir en vuestro tema hijo o plugin de funciones:

add_filter('woocommerce_rest_prepare_product_object', 'filter_product_response', 10, 3);
function filter_product_response($response, $product, $request){
    $post_object = get_post( $product->get_id() );
    $content = preg_replace( '#\[[^\]]+\]#', '', $post_object->post_content );
    $response->data["description"] = apply_filters( 'the_content', $content );
    return $response;
}

Y solo con estas líneas, asunto resuelto, a importar los productos a Miravia y a vender todo lo que se pueda también por esa vía.

Un apunte final. La verdad es que me gustó que el plugin de Miravia usara la REST-API para leer los productos. Hay plugins para conectar con otros marketplaces o plataformas que usan técnicas hechas a medida, que sin ser malas, al no ser estándares complican cualquier problema de este tipo. Así que bueno, esperemos que esto sea lo normal a partir de ahora porque la REST-API de WooCommerce está muy infrautilizada para multitud de problemas que podría resolver.

Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.

Almacenamos las IPs desde la que se envían las valoraciones para evitar fraudes

Francisco Javier Carazo Gil

Ver comentarios

    • No sé si has importado ese producto antes, si has puesto bien el código... si estás filtrando en un hook posterior esa información.

      Tendrías que verlo. Quien te haga temas de desarrollo díselo para que revise qué está pasando.

      • Esa persona soy yo...
        Una duda vosotros manejais el plugin de importación de Miravia? Me refiero se os podría contratar para conseguir la publicación correcta de todos mis productos? Escribeme por mail y lo hablamos porque la verdad es que llevo días con el y ando algo perdido

        • Realmente no es el plugin de Miravia ahí el problema, es el manejo de la REST-API.

          Y sí claro, esto lo hemos resuelto en otros clientes.

          Te escribo luego, ¿vale?

  • Hola muchas gracias por tu artículo pero a mi no me ha funcionado.....

    • Dame más detalles. ¿Cómo estás viendo el resultado? ¿Con Postman? ¿Qué te aparece? ¿Estás seguro de que está ejecutando?

Entradas recientes

¿Por qué falla Bizum en WooCommerce? 9 causas

Por qué falla Bizum WooCommerce: detecta errores de credenciales, firma, entorno y pedidos para recuperar…

hace % días

Plugin gratuito Redsys WordPress: qué revisar

Elige un plugin gratuito Redsys WordPress con criterio: compatibilidad, seguridad, configuración bancaria y límites para…

hace % días

Qué necesito para activar CECA Online en mi web

¿Qué necesito para activar CECA Online? Revisa contrato bancario, datos del terminal, seguridad, pruebas y…

hace % días

Cómo elegir una pasarela para suscripciones

Aprende a elegir una pasarela para suscripciones en WordPress: revisa recurrencia, compatibilidad, seguridad y soporte…

hace % días

Plugin Bizum WordPress para cobrar con control

Elige un plugin Bizum WordPress compatible con tu flujo de venta, configura la pasarela bancaria…

hace % días

Cómo aceptar CECA en reservas de WordPress

Aprende cómo aceptar CECA en reservas WordPress, configurar pagos seguros y confirmar cada reserva sin…

hace % días