Este artículo tiene más de 2 años. Si contiene información técnica es posible que no se ajuste a las últimas versiones.

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