Ticker

6/recent/ticker-posts

Ad Code

Responsive Advertisement

Relación bidireccional entre diferentes tipos de contenido con ACF

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

ACF grupo campo equipo

 
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.

ACF grupo campo jugador

 

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.

jugadores equipo

 
Veremos que al ingresar al jugador 4 esta relación ya existe con el “Equipo Barcelona”

equipos jugador

 

La relación inversa también debe funcionar, es decir si desde un jugador agrego equipos, al ingresar a un equipo se debe ver la relación con el jugador.

 

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.

Suscríbete a DecodeCMS:  

 

La entrada Relación bidireccional entre diferentes tipos de contenido con ACF es un artículo reciente del sitio DecodeCMS.

Enregistrer un commentaire

0 Commentaires