Como programador, comenzaría a escribir mi propio código para conectar mis tipos de publicaciones. No es una forma rápida, no es fácil, pero es muy divertido.
Los tipos de publicación
Comenzamos creando dos tipos de publicaciones simples Authory Books:
add_action('init', 'p2p2_register_author');
add_action('init', 'p2p2_register_book');
function p2p2_register_author(){
$labels = array(
'name' => 'Author',
'singular_name' => 'Author',
'add_new' => 'Add New',
'add_new_item' => 'Add New Author',
'edit_item' => 'Edit Author',
'new_item' => 'New Author',
'all_items' => 'All Authors',
'view_item' => 'View Authors',
'search_items' => 'Search Authors',
'not_found' => 'No authors found',
'not_found_in_trash' => 'No authors found in Trash',
'parent_item_colon' => '',
'menu_name' => 'Authors'
);
register_post_type(
'Author',
array (
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'author' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
)
);
}
function p2p2_register_book(){
$labels = array(
'name' => 'Books',
'singular_name' => 'Book',
'add_new' => 'Add New',
'add_new_item' => 'Add New Book',
'edit_item' => 'Edit Book',
'new_item' => 'New Book',
'all_items' => 'All Books',
'view_item' => 'View Book',
'search_items' => 'Search Books',
'not_found' => 'No books found',
'not_found_in_trash' => 'No books found in Trash',
'parent_item_colon' => '',
'menu_name' => 'Books'
);
register_post_type(
'Book',
array (
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'book' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
)
);
}
Nada lujoso allí. De hecho, es del Codex !
El metabox
Continuemos agregando un metabox para nuestro autor a nuestro tipo de publicación de libro:
add_action('admin_init', 'p2p2_add_author_metabox');
function p2p2_add_author_metabox(){
add_meta_box(
'book_author',
__('Book Author', 'bandpress'),
'p2p2_book_author_metabox',
'book',
'side',
'default',
array( 'id' => 'p2p2_author')
);
}
Aquí puede ver una función de devolución de llamada p2p2_book_author_metaboxque será lo que está dentro de nuestro metabox.
El contenido del metabox.
Vamos a crear la función:
function p2p2_book_author_metabox($post, $args){
wp_nonce_field( plugin_basename( __FILE__ ), 'p2p2_book_author_nonce' );
$author_id = get_post_meta($post->ID, 'p2p2_book_author', true);
echo "<p>Select the author of the book</p>";
echo "<select id='p2p2_book_author' name='p2p2_book_author'>";
// Query the authors here
$query = new WP_Query( 'post_type=author' );
while ( $query->have_posts() ) {
$query->the_post();
$id = get_the_ID();
$selected = "";
if($id == $author_id){
$selected = ' selected="selected"';
}
echo '<option' . $selected . ' value=' . $id . '>' . get_the_title() . '</option>';
}
echo "</select>";
}
Aquí es donde sucede la magia. Primero vamos a consultar la base de datos de autores y luego rellenamos <select>con los resultados de nuestra consulta. Consulte el Codex para obtener más información WP_Query. Ahora puede ir al tipo de publicación de su libro y ver su menú desplegable:

Guardando nuestro contenido
Por supuesto, queremos guardar nuestra selección, así que agregamos otra función que nos va a guardar el metabox:
add_action('save_post', 'p2p2_save_author_metabox', 1, 2);
function p2p2_save_author_metabox($post_id, $post){
// Don't wanna save this now, right?
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( !isset( $_POST['p2p2_book_author_nonce'] ) )
return;
if ( !wp_verify_nonce( $_POST['p2p2_book_author_nonce'], plugin_basename( __FILE__ ) ) )
return;
// We do want to save? Ok!
$key = 'p2p2_book_author';
$value = $_POST["p2p2_book_author"];
if ( get_post_meta( $post->ID, $key, FALSE ) ) { // If the custom field already has a value
update_post_meta( $post->ID, $key, $value );
} else { // If the custom field doesn't have a value
add_post_meta( $post->ID, $key, $value );
}
if ( !$value ) delete_post_meta( $post->ID, $key ); // Delete if blank
}
¡Ahora ve y guarda un libro con un autor! El autor del libro se guardará en la wp_postmetatabla de la base de datos y el valor seleccionado del menú desplegable será el del meta.
Una columna de autor para el libro.
Expandamos el área de administración de nuestros libros. Comenzaremos cambiando las columnas:
add_filter('manage_edit-book_columns', 'p2p2_add_book_columns');
function p2p2_add_book_columns($columns){
$new_columns['cb'] = '<input type="checkbox" />';
$new_columns['title'] = _x('Title', 'column name', 'bandpress');
$new_columns['p2p2_author'] = __('Author', 'bandpress');
return $new_columns;
}
Esta función se asegura de que solo veamos el título de las columnas y p2p2_author. La columna de casilla de verificación cb es necesaria para la funcionalidad de edición masiva de WordPress. Ahora necesitamos agregar alguna información a nuestra columna. Agregamos esta función:
add_action('manage_book_posts_custom_column', 'p2p2_fill_book_columns', 10, 2);
function p2p2_fill_book_columns($column_name, $id) {
global $wpdb;
switch ($column_name) {
case 'p2p2_author':
$author_id = get_post_meta($id, 'p2p2_book_author', true);
$author = get_post($author_id);
$permalink = get_permalink($author_id);
echo "<a href='" . $permalink . "'>" . $author->post_title . "</a>";
break;
default:
break;
} // end switch
}
El cambio es para cada columna que acaba de agregar en la función anterior. Lo llenas haciendo eco de lo que quieres mostrar. Recibimos la publicación que es el autor de nuestro libro y creamos un enlace permanente a su 'página de perfil'. Esto es lo que parece:

Continuará
Conectamos dos tipos de publicaciones en el back-end de nuestro sitio de WordPress, pero no podemos ver nada en la interfaz. Necesitará mucho más trabajo para lograr esto, pero las posibilidades son infinitas. Podríamos:
- Ordenar libros por autor
- Mostrar una lista de libros en la página del autor.
- Mostrar una lista de otros libros del autor en la página del libro.
- Crea un metabox elegante con imágenes del autor
- Cree una columna en la página de administración del autor para los libros que escribió.
- Y mucho más...
Seguiré trabajando en esta respuesta, ya que necesito esta solución yo mismo. Sin embargo, dejaré de trabajar por ahora. Comenzaré a actualizar esta respuesta mañana.