Cum creez o relație între două tipuri de postări personalizate?
Vreau să construiesc o bază de date pentru seriale TV folosind WordPress. Am urmat câteva tutoriale și am două tipuri de postări personalizate: unul pentru movies
, unul pentru series
. Am urmat această postare pentru structură.
Întrebarea mea este: cum pot face relația între tipurile de postări pentru filme și seriale?

Folosirea unui Plugin
Câteva pluginuri foarte bune pentru relații:
Folosirea unei Metabox
Puteți construi o relație simplă folosind metabox-uri:
add_action( 'admin_init', 'add_meta_boxes' );
function add_meta_boxes() {
add_meta_box( 'some_metabox', 'Relația Filme', 'movies_field', 'series' );
}
function movies_field() {
global $post;
$selected_movies = get_post_meta( $post->ID, '_movies', true );
$all_movies = get_posts( array(
'post_type' => 'movies',
'numberposts' => -1,
'orderby' => 'post_title',
'order' => 'ASC'
) );
?>
<input type="hidden" name="movies_nonce" value="<?php echo wp_create_nonce( basename( __FILE__ ) ); ?>" />
<table class="form-table">
<tr valign="top"><th scope="row">
<label for="movies">Filme</label></th>
<td><select multiple name="movies">
<?php foreach ( $all_movies as $movie ) : ?>
<option value="<?php echo $movie->ID; ?>"<?php echo (in_array( $movie->ID, $selected_movies )) ? ' selected="selected"' : ''; ?>><?php echo $movie->post_title; ?></option>
<?php endforeach; ?>
</select></td></tr>
</table>
<?php
}
add_action( 'save_post', 'save_movie_field' );
function save_movie_field( $post_id ) {
// rulează doar pentru serii
if ( 'series' != get_post_type( $post_id ) )
return $post_id;
// verifică nonce
if ( empty( $_POST['movies_nonce'] ) || !wp_verify_nonce( $_POST['movies_nonce'], basename( __FILE__ ) ) )
return $post_id;
// verifică autosave
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return $post_id;
// verifică permisiunile
if ( !current_user_can( 'edit_post', $post_id ) )
return $post_id;
// salvează
update_post_meta( $post_id, '_movies', array_map( 'intval', $_POST['movies'] ) );
}
Apoi, pentru a obține relația filmelor ca listă pentru postările de tip serie:
$series = new WP_Query( array(
'post_type' => 'movies',
'post__in' => get_post_meta( $series_id, '_movies', true ),
'nopaging' => true
) );
if ( $series->have_posts() ) { while ( $series->have_posts() ) {
$series->the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
} }

Fără a crea un alt articol, putem adăuga aici cum să creăm un permalink din această relație părinte/copil? De exemplu: http://domain.com/nume-serie/nume-film
?

@Xtremefaith acest lucru poate fi realizat cu alt cod. Există un plugin pe care l-am creat pentru categorii. Poate îl poți folosi ca referință. https://wordpress.org/plugins/hierarchical-urls/

Recomand pluginul Posts 2 Posts, pe care tocmai am început să-l folosesc.
Acesta vă permite să creați relații many-to-many între postări și tipuri de pagini, ceea ce înseamnă că puteți lega movies
de series
, și orice alte CPT-uri pe care le-ați putea crea.
Acest plugin vă permite, de asemenea, să creați metadate de conexiune care vă vor permite să obțineți detalii mai fine atunci când creați conexiunile. Este destul de flexibil în utilizare, permițând control asupra metabox-urilor din admin, tipurilor de conexiuni și modalităților de afișare a conexiunilor pe frontend. În cele din urmă, este bine documentat.

Căutam ceva similar și am încercat diverse soluții. Trebuie să spun că aceasta (Post 2 Post) a fost perfectă, poate nu este exact ceea ce și-ar dori un 'non-programator', dar dacă cauți mai degrabă ceva asemănător unei biblioteci de utilizat în template-ul tău, atunci este pur și simplu perfectă, bine documentată, bine integrată, ia-o! ;)

Am făcut un mic plugin pentru relații între postări dar https://wordpress.org/plugins/softmixt-relations

Din păcate, plugin-ul Posts 2 Posts este învechit și nu mai este întreținut. Există un nou plugin alternativ pentru aceasta MB Relationships. Este inspirat de P2P și oferă un API similar pentru a crea relații între articole, termeni și utilizatori.
MB Relationships suportă relații bidirecționale în mod implicit și utilizează o tabelă personalizată pentru a stoca relațiile (ca P2P) pentru o performanță mai bună (decât meta postările).
Merită să aruncați o privire asupra acestui plugin.
