Nuestro Blog

Manuel Piquer Estudio

Relacionar 2 Custom Post Types en WordPress

Aprende en este tutorial cómo relacionar dos Custom Post Types (CPTs) en WordPress mediante código, sin plugins.

¿Te interesa crear dos CPTs distintos pero que estén relacionados de alguna manera?

Con un ejemplo se entiende mejor:

Imagina que quieres estructurar cursos y lecciones. En ese caso tienes dos opciones:

  1. Crear un CPT jerárquico, de forma que los cursos sean los «padres» y las lecciones los «hijos». Esta es la opción más sencilla. Si te interesa puedes echar un vistazo a este tutorial.
  2. Generar dos CPT, uno para «cursos» (puedes echar un vistazo a este tutorial) y otro para «lecciones» para luego relacionarlos entre ellos de forma jerárquica. Esto resulta algo más complejo pero si tienes gran cantidad de cursos y lecciones te permite estructurarlos mejor. De hecho, es como lo hacen algunos LMS como Sensei.

En este tutorial vas a ver la segunda solución: cómo crear dos CPTs relacionados entre sí, uno para cursos y otro para sus lecciones.

Este sería el resultado:

Pasos para relacionar de forma jerárquica dos CPTs en WordPress

1. Crea los Custom Post Types

Siguiente el mismo ejemplo, en primer lugar genera el CPT de cursos siguiendo el tutorial para hacerlo mediante código.

Pero asegúrate de que en el array de argumentos del CPT curso tienes esta línea:

'hierarchical' => true,

Además, comprueba que el array de ‘supports’ incluye el argumento ‘page-atributes’, por ejemplo:

'supports'              => array( 'title', 'editor', 'excerpt', 'thumbnail', 'custom-fields', 'page-attributes' ),

Ambas opciones son imprescindibles para poder agregar las lecciones como «hijas» del curso.

Ahora le toca el turno al CPT de lecciones. Recuerda que no debe de ser jerárquico, así que en el array de argumentos debes tener esta la línea:

'hierarchical' => false,

Una vez que hayas creado ambos CPTs, necesitas generar la forma de relacionar el CPT «hijo» (las lecciones) con el CPT «padre» (los cursos) a través de una metabox de WordPress.

2. Genera el metabox para relacionarlos

Para definir que es Metabox de una manera muy rápida, podríamos decir que es una caja con metadatos (una sección que agrupa nuestros campos personalizados en WordPress) .

Para crear el metabox nos hará falta agregar este código al  functions.php  de nuestro tema.

Código a insertar :

// Añadir metabox para relacionar lecciones con el curso padre

function cpt_parent_meta_box() {
	add_meta_box( 'lesson-parent', 'Curso', 'cpt_lesson_parent_meta_box', 'leccion', 'side', 'high' );
}
add_action( 'add_meta_boxes', 'cpt_parent_meta_box' );
function cpt_lesson_parent_meta_box( $post ) {
	$post_type_object = get_post_type_object( $post->post_type );
	$pages = wp_dropdown_pages( array( 'post_type' => 'curso', 'selected' => $post->post_parent, 'name' => 'parent_id',
                                 'show_option_none' => __( '(no parent)' ), 'sort_column'=> 'menu_order, post_title', 'echo' => 0 ) );
if ( ! empty( $pages ) ) {
		echo $pages;
	}
}

Con este código, cuando añadas una nueva lección, te aparezca una metabox en la parte superior derecha, donde podrás elegir el curso «padre».

Si has registrado tus CPTs con otro nombre (en lugar de ‘curso‘ y ‘leccion‘) recuerda sustituirlos en el bloque anterior.

Ya casi lo tienes.

3. Asigna las lecciones al curso «padre»

Por último, crea las lecciones y selecciona su curso padre correspondiente en la nueva metabox llamada «Curso».

Ves!, ha resultado fácil elegir ahora a qué curso corresponde cada lección.

¡Mantener dos CPT separados pero relacionados de forma jerárquica de forma sencilla!
, ahora ya sabes cómo hacerlo mediante código.
Esto es ideal para cursos y lecciones, como en el ejemplo presentado, pero puedes adaptarlo a tus necesidades.

Otros Articulos