En un artículo anterior vimos cómo usar los campos personalizados de WordPress en entradas. Puesto que se puede aplicar lo mismo a cualquier Custom Post Type, en este artículo veremos cómo crear campos personalizados en productos de WooCommerce.
Resultado Final
Al final, obtendremos algo similar a lo que se muestra en la siguiente imagen.
Generalidades
WooCommerce te permite agrupar productos por categorías y etiquetas, además puedes agregar atributos de productos, sin embargo, si quieres añadir características adicionales como parte de la información del producto, puedes evaluar usar campos personalizados.
Por ejemplo para una tienda de libros podríamos considerar los siguientes campos personalizados:
- Edición
- Autor(es)
- Género
- Editorial
- Enlace a recursos externos, etc
Crear campos personalizados
Para añadir los campos personalizados de manera simple, usaremos el plugin Advanced Custom Fields.
Tras instalar el plugin verás que te aparece una opción en el menú del dashboard llamada custom fields, tras ingresar lo primero que tienes que hacer es agregar un nuevo Field Group e ir añadiendo cada uno de los campos personalizados.
Es posible añadir campos de tipo de selección, tal como se ve en la imagen.
Los campos de selección permiten definir condicionales para nuevos campos basado en los valores de selección.
Al final tras ingresar los campos personalizados podrás ver en la pantalla de edición de producto los campos creados, listos para ser usados como parte de la información del producto.
Mostrar Campos personalizados en el front-end de tu sitio
Todo lo realizado anteriormente de momento no se esta mostrando a los usuarios de tu tienda, para mostrar esta información en el detalle de producto puedes hacer uso de los hooks de WooCommerce y de las funciones del plugin Advanced custom field.
Coloca el siguiente código al final del archivo functions.php de tu theme.
add_action( 'woocommerce_single_product_summary', "dcms_caracteristicas_producto", 8 );
function dcms_caracteristicas_producto(){
if (function_exists('get_field')){
echo "<p><strong>Edición:</strong> ". get_field('edicion')."</p>";
echo "<p><strong>Autor: </strong>". get_field('autor')."</p>";
echo "<p><strong>Género: </strong>". get_field('genero')."</p>";
echo "<p><strong>Editorial: </strong>". get_field('editorial')."</p>";
}
}
En el código anterior:
- Usamos el hook woocommerce_single_product_summary que hace referencia a la función dcms_caracteristicas_producto
- Dentro de la función comprobamos si la función get_field del plugin Advanced Custom fields existe
- Si la función existe, entonces la usamos para recuperar los campos creados
Ver comentarios (174)
Le agradezco su aporte me ha resuelto parte del problema que tengo. He incluido las campos personalizados en la página de producto. Ahora necesito añadir alguno de los campos personalizados en el listado de productos. Me podrías ayudar. De antemano muchas gracias.
De manera general, podrías revisar los Hooks que tiene Woocommerce: https://docs.woocommerce.com/wc-apidocs/hook-docs.html , alguno de ellos debería tener efecto en el listado.
Hola, sabes que pasó con estas páginas de los hooks ? he intentado entrar a varias y no funcionan.
Hola Hugo, revisa este artículo en donde trato un plugin para ver visualmente los Hooks de WooCommerce y el tema Storefront. https://decodecms.com/guia-visual-de-hooks-para-storefront-y-woocommerce/
Siento que estaba tan cerca de solucionar mi problema hasta que me salio este aviso
Los cambios en tu código PHP se han revertido debido a un error en la línea 65 del archivo wp-content/themes/north-wp/functions.php. Por favor, arréglalo y trata de guardar de nuevo.
syntax error, unexpected '>'
QUÉ PUEDO HACER ? NO SE QUE ES LO QUE FALLA.
Hola, revisa bien el código, prueba con el código de ejemplo sin realizar cambios, te sugiero además usar el Administrador de Archivos de tu Cpanel en lugar de hacer los cambios con el editor de tu WordPress, ya que este último es muy limitado y te reportará a veces errores cuando no los hay.
Un buen tutorial,gran ayuda, gracias.
Tengo una consulta, voy a hacer una importación masiva de datos de productos por CSV, a la hora de importar te pregunta donde quieres cada columna de datos. He hecho una prueba y los que vienen en origen estan todos pero no salen los nuevos campos creados. ¿Hay alguna solución?
Hola, podrías revisar el siguiente hilo de discusión del foro de ACF, https://support.advancedcustomfields.com/forums/topic/import-custom-posts-via-csv/ , revisa especialmente las últimas entradas.
Parece ser que existe un error en la sintaxis, al menos para las versiones más recientes de Wordpress.
Este código, al menos no da un error en la sintaxis al intentar guardarlo:
sin embargo por algún motivo, no me pinta el valor del campo en el front....
Hola, cuando es un error de sintaxis es PHP quien lo valida, no WordPress, qué error te aparece cuando usas el código de este artículo, el código que envías no veo que imprima los campos.
hola exente tutorial , todo perfecto lo único es que no se imprimen los datos capturados en el frot.... espero su valiosa colaboración
Hola, tal como lo tienes si que debería mostrarse, asegúrate de usar los nombres de los campos en lugar de labels, los nombres son usualmente escritos siempre en minúsculas y sin caracteres especiales. Si sigues con problemas prueba activar y colocar el código en otro theme, usa alguno de los que viene por defecto.
Muy buen aporte me ayudo mucho, me gustaria saber como agrego esos campos creados a la zona de widgets para poder usarlos en un sidebar, estoy en proceso de creacion de una tienda web y los necesito para crear el catalogo de filtros.
Gracias
Hola, parece que hay un plugin que te puede ayudar con los filtros y que veo que se integra con ACF (Advanced Custom Fields)
Hola
Vuelvo a releer éste post y a visionar el video anexo buscando información sobre la manera en qué podría implementar la opción de que al pagar el cliente con PayPal se sume ése porcentaje que cobra PayPal al total del pedido, y que dicho sobreprecio salga especificado en la orden de pedido antes de aceptar; para que el cliente puede continuar o pagar el pedido por Stripe sin pagar el sobreprecio de PayPal.
Imagino que quizá no sea objeto de éste tutorial
Enhorabuena por el contenido tan valioso que generas y gracias por compartirlo.
Un saludo
Hola, prueba con un plugin, por ejemplo: https://es.wordpress.org/plugins/woo-payment-discounts/ , revisa si te permite ingresar un número negativo, sino tendría que cambiarlo por código modificando el plugin.
Perfecto!! Funciona perfectamente. Solo que no sé cómo hacer para que esos campos se muestren en otro color para destacarlos sobre el resto del texto.
Hola, usa código CSS al mostrar los campos en el front-end, por ejemplo en:
Aunque lógicamente lo mejor sería que tengas clases CSS que puedas reutilizar en lugar de colocar estilos en línea.
Gracias por el aporte, esta excelente , pregunta que plantillas, podrias recomendar para una tienda en linea de aparatos electronicos y domesticos.
Hola StoreFront te podría servir, es un theme liviano de los creadores de WooCommerce para tienda, tiene además child-themes que tienen diseños particulares.
Cómo se haría para que pinte una imagen añadida en un campo personalizado?
El nombre del campo que he asignado es: «foto_del_autor», el tipo de campo es una imagen, y por defecto tengo asignado que el valor que devuelve es el «Array de imagen», aunque creo que podría ser factible que devuelva la «URL de la imagen».
Siguiendo tu código he tratado de escribir lo siguiente, pero me da errores en la sintaxis:
Disculpa las molestias por enviar varios mensajes, no lograba pegar correctamente el código que he probado y muchas gracias
Hola, no veo que hayas agregado código para mostrar la foto del autor, tienes que usar la etiqueta HTML img, revisa : https://www.w3schools.com/tags/tag_img.asp , lo que te devuelva el campo debería ser la ruta que debes ponerla en el atributo src, lo único que tienes que cuidar son las comillas, usa comillas simples par el src, es decir si tu campo se llama imagen podrías probar:
Saludos.
De entrada gracias por toda la información Jhon.
Tengo una duda que se ha convertido en problema.
¿Es posible insertar ACF a las plantillas de mail de woocommerce (customer-new-account.php, etc...)?
Lo he probado creando un ACF Pagina de optiones para poder añadir el texto deseado y luego añado en la plantilla añado el the_field() o get_field, pero me temo que no funciona.
¿Alguna solución?
Slaudos
Hola, prueba como se comenta en este enlace, que primero tienes que obtener el ID de la orden para usarlo en el campo de get_field() como segundo parámetro: advanced-custom-fields-in-woocommerce-email-templates