En este artículo veremos como relacionar dos Custom Post Type (CPT) usando el plugin de Advanced Custom Fields (ACF), de manera que cuando se agregue una relación a uno, también se guarde en el otro.
Generalidades
Tenemos dos CPT, uno de jugadores y otro de equipos:
- Cuando se agrega un equipo tenemos la opción de seleccionar los jugadores
- Cuando se agrega un jugador tenemos la opción de seleccionar los equipos a los que pertenece
Lo que esperamos conseguir con la relación bidireccional es que si un jugador se agrega a un equipo, deberíamos ver esa relación al entrar al jugador y lo mismo, si desde un jugador le agregamos una relación con un equipo, debería también verse esa relación al entrar al equipo.
Creando los grupos de campos
Tenemos dos grupos de campos con ACF, el primero de ellos Equipo, asociado al CPT con el mismo nombre, vemos en este grupo que hay un campo de relación de jugadores asociado con el CPT jugador
El otro grupo de campos es de Jugador, asociado al CPT del mismo nombre, vemos en este grupo que hay un campo de relación de equipos asociado al CPT de equipo.
Código para relacionar ambos grupos de campos
Podemos ver la clase que usaremos en el siguiente código.
Puedes incluir este archivo como parte de los archivos de tu tema hijo.
En el código anterior:
- Estamos usando dos Hooks de filtro de ACF en el constructor, cuando se actualiza el campo de jugadores y cuando se actualiza el campo de equipo
- Utilizamos una función genérica update_elements_cpt() para actualizar los elementos del otro CPT
- La función genérica hace comprobaciones si es necesario insertar o eliminar elementos
- Como parte del código también se usa una variable global para evitar llamadas recurrentes
Para usar este archivo simplemente puedes incluirlo desde el functions.php de tu tema hijo con el siguiente código, asumiendo que esta dentro de una carpeta includes y que tiene el nombre relations_cpt.php
// CPT relations with ACF
include_once "includes/relations_cpt.php";
new RelationsCPT();
Resultado final
Al final obtendremos que cuando agregamos un jugador a un equipo, al ingresar al jugador veremos también que tiene una relación con el equipo.
Desde el CPT de equipo “Equipo Barcelona” agregamos jugadores, los jugadores: jugador 1 y jugador 4.
Veremos que al ingresar al jugador 4 esta relación ya existe con el “Equipo Barcelona”
Conclusión
Como has podido comprobar, si quieres relacionar varios CPT de manera bidireccional con relaciones del plugin ACF puedes hacerlo a través de código, en este artículo hemos visto una clase que nos ayuda a realizar esas relaciones y la puedes adaptar a tus necesidades.
¿Aún con dudas?, en el siguiente video se detallan los puntos anteriores.
La entrada Relación bidireccional entre diferentes tipos de contenido con ACF es un artículo reciente del sitio DecodeCMS.
0 Commentaires