Conectar entradas o páginas de WordPress con artículos de Woocommerce

Recientemente desarrollando una solución de comercio electrónico para una empresa, me encontré con la necesidad de conectar entradas personalizadas de WordPress (un custom post type) con los artículos de Woocommerce. Básicamente la idea es crear un Custom Post Type con marcas y poder asignarle a cada artículo una marca con un campo personalizado. Por supuesto, Woocommerce dispone del correspondiente “plugin” para incluir marcas en los productos, pero mi intención es aprovechar al máximo la capacidad de “conectar contenido” dentro de WordPress. Este ejemplo, viene a demostrar la extrema potencia del plugin Advanced Custom Fields (ACF) para extender el funcionamiento de tu sitio web WordPress, gracias al uso de los campos de tipo Relación.

El campo relación de ACF al rescate en Woocommerce

En algún proyecto ya he experimentado con la capacidad de plugin ACF para integrarse con Woocommerce (WC). A fin de cuentas WC extiende los productos como una entrada personalizada (product) con sus taxonomías (product_cat) y campos personalizados.

A mí modo de ver uno de los campos más poderosos de ACF es el de relación o el de Objeto Post. El objetivo de estos campos es conectar el contenido (entradas con páginas, entradas con entradas, etc), de forma que permite una organización muy precisa de nuestro sitio web.

El ejemplo que paso a describir, permite mostrar una plantilla de custom post type (singular_{$custom_post_type}.php) donde lista todos los objetos conectados a la misma. En este ejemplo sería “mostrar para cada marca una relación de productos en Woocommerce”. Esto es, suponiendo que hemos creado una página de venta de gafas (ese es mi proyecto), podríamos añadir marcas como custom post types y al introducir productos en Woocommerce seleccionar la marca como un campo personalizado.

Editar producto Woocommerce ACF

Una vez asignar una marca a cada producto, la cuestión es mostrar en la plantilla los productos de cada marca. Hay que tener en cuenta que una simple consulta WP_Query utilizando tax_query no nos sirve, puesto que a nivel interno ACF, guarda el valor serializado. Por tanto necesitamos recurrir a la estupenda documentación para encontrar una solución.

Código de ejemplo para mostrar productos Woocommerce por entradas personalizadas

Para conseguir mostrar los productos necesitamos crear un consulta con la función get_posts(), pasando como argumentos el custom post type de Woocommerce “product” y como campo personalizado, el creado en ACF y que “conecta” el producto con la marca. La clave está en generar un operador LIKE con el ID del custom post type. Más fácil verlo que explicarlo.

Una vez tenemos en la variable $productos la información, necesitamos realizar un bucle por todo el array con los valores devueltos. Para ello lo único es recorrer el array para obtener los datos de cada producto por la marca indicada. Aquí podemos utilizar las funciones propias de WordPress para extraer la información de la base de datos. La única precaución es pasar la instancia de cada entrada con su ID correspondiente.

Acceder a los atributos de los productos Woocommerce en la plantilla

Para finalizar podemos acceder a los atributos del producto (precio por ejemplo) en nuestra plantilla gracias a crear una instancia de clase WC_Product. Así dentro de nuestro bucle foreach, podremos acceder a la información que almacena Woocommerce sobre los productos como campos personalizados.

En la imagen se puede apreciar el resultado final. Una página de marca que reúne los modelos disponibles para esa marca. Por supuesto al editar el producto hay que seleccionar la marca como campo personalizado. Es posible asignar varias marcas a un mismo producto. No obstante, este es un ejemplo que es fácil trasladar a otras situaciones y que demuestra el potencial de WordPress para gestionar el contenido de un sitio web.

Ejemplo relación custom post type

2 respuestas a “Conectar entradas o páginas de WordPress con artículos de Woocommerce

  1. Hola que tal!!

    Ojala puedas ayudarme con una duda que tengo.
    Hace poco desarrollé un sitio de ventas de cursos online, la hice con Wp-Types (Entradas Personalizadas) y la integré a un carrito de compra (Simple Paypal shopping cart) luego el cliente quiso usar Woocommerce, es alli donde vino el problema, será posible que de alguna forma integre el WC a mis entradas personalizadas? sin tener que volver a cargar todo en el sistema de woocomerce, y que pueda ver esos paneles que tiene la vista de creacion de producto dentro de mi pantalla de creacion de curso hecha en WP-types??

    1. Hola Carlos, el caso que comentas precisamente yo lo tuve con el sitio web que comento en este artículo. Fue el motivo por el que decidí migrar todo el sitio a Woocommerce, la solución del plugin de Paypal era insuficiente. En la otra web me encontraba con una situación similar. Había creado un custom post type para gafas con sus campos personalizados a través de Advanced Custom Fields. La web funciona bien, pero un comercio electrónico es algo más que un simple botón de pago con paypal y en la inmensa mayoría de los casos hay que estar preparado para requerimientos futuros (que no suelen ser definidos por los clientes, pero nosotros como desarrolladores debemos tener previstos).

      Lamentablemente no tengo experiencia con WP Types porque toda la funcionalidad que indican (a excepción de crear los CPT que lo hago con unas pocas líneas de código) la hago a través de Advanced Custom Fields (preferiblemente versión PRO). De cualquier forma la situación es que tienes creados con un custom post type los cursos. Esto como bien sabes genera en un “post type” en la base de datos de WP del tipo definido al generar el CPT con la función register_post_type(). Supongo que ya estarás familiarizado con la estructura generada por WP Types en la base de datos. Si no es así te sugiero que te documentes bien con programas como phpmyadmin o sequel pro . El objetivo es que tengas claro como se relacionan las tablas y el tipo de campos que genera. Es importante para hacer cualquier tarea de depuración de errores.

      Lo primero que se me pasa por la cabeza es que tendrás que transformar de golpe muchos custom post type de tus cursos para transformarlos en el post type que genera WC con sus productos. Hay plugins que permiten convertir de golpe CPT, como por ejemplo Convert Post Types Podrías probar a hacerlo (yo no lo he probado a hacer) en un entorno de pruebas y ver como responde.

      Desafortunadamente la funcionalidad de WC (proceso de venta, inventario, gestión etc) está atada por completo a los custom post type de product que genera junto con las taxonomías de categoría y etiquetas (product_cat y product_tag). En el caso que te comentaba, decidí migrar todo y aprovechar la máximo las url conforme estaban (también había generado CPT por ejemplo para marcas) y lo que no pues redirecciones 302.

      Entiendo que tienes mucho material para migrar y que es un trabajo grande. Siempre puedes crear la web con WC y lo que tengas hecho redireccionar. Es un trabajo, pero te sale a cuenta porque a largo plazo tendrás una web mucho más extensible que con un simple botón de PayPal. En el artículo lo quería explicar es como la funcionalidad básica de WC puede ser extendida con campos personalizados y CPT, evitando el pago de plugins que en ocasiones te atan a un modelo de pago periódico y a un código poco extensible (a no ser que controles mucho WC). Como sabrás Woothemes también tiene un plugin para la creación de cursos online con WordPress llamado Sensei. Es de pago, pero a fin de cuentas el trabajo del desarrollador también lo es ¿no?

      Espero que todo esto te sirva de algo. Muchas gracias por tu comentario.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *