Comment créer une relation entre deux types de publication personnalisés?
-
-
Tout d'abord,vousne créez ** PAS ** unebase de donnéesentière,vous créez simplement untype depublicationpersonnalisé de WordPress.Et dans le cadre de WordPress,vous avez denombreuses opportunités de les catégoriser,de lestrier,etc. Ettoutes sontfaites avec unebonne relationinterne.Donc,la relation dont vousparlezest déjà là,il vous suffit de lamettreen œuvre comme vous le souhaitez.Donc,je vous suggère d'implémenter lepost_type commeindiqué,puis demodifier la question avec votre vraie requête.First of all, you are **NOT creating** a whole database, you are just creating a WordPress' Custom Post Type. And within WordPress scope you have many opportunities categorizing them, sorting them etc. And all of them are done with a good internal relationship. So, the relationship what you are talking about is already there, you just have to implement it in the way you need. So, I would suggest you to implement the post_type as directed, and then edit the question with your real query.
- 0
- 2014-01-05
- Mayeenul Islam
-
@MayeenulIslam,`"implémenter lepost_type commeindiqué "` que voulez-vous dire?@MayeenulIslam, `"implement the post_type as directed"` what do you mean?
- 0
- 2014-01-05
- CoalaArmy
-
Commeindiqué dans [votrefil de discussionfourni] (http://wordpress.stackexchange.com/questions/20125/tv-show-database-best-way-for-structuring-it),ouen utilisant ungénérateur simple comme:[cegénérateur detype demessage] (http://themergency.com/generators/wordpress-custom-post-types/).As directed in [your provided link-thread](http://wordpress.stackexchange.com/questions/20125/tv-show-database-best-way-for-structuring-it), or by using a simple generator like: [this Post Type Generator](http://themergency.com/generators/wordpress-custom-post-types/).
- 0
- 2014-01-05
- Mayeenul Islam
-
@MayeenulIslam: Jene suispas convaincu que "la relation dont vousparlezest déjà là".Par défaut,iln'y apas de relation directeentre les différentstypes depublication.@MayeenulIslam : I am not convinced that "the relationship what you are talking about is already there". By default, there is no direct relationship between different post types.
- 0
- 2014-01-05
- s_ha_dum
-
@s_ha_dum Désolé,j'aimanqué unepartie de sa question oùil a déjà dit qu'il avait deuxpost_types.C'estmonerreur.J'essaie de le clarifier avec ses détails.J'ai raté que le détailest déjà là.:( Jeparle de la relationinterneentre lataxonomieet letype depublicationpersonnalisé si défini.@s_ha_dum Sorry, I missed some part of his question where he already said that he had two post_types. It's my mistake. I's trying to make him clarify with his detail. I missed that the detail is already there. :( I's talking about the inner relationship of taxonomy and custom post type if defined.
- 0
- 2014-01-05
- Mayeenul Islam
-
3 réponses
- votes
-
- 2014-01-05
Utilisation d'unplugin
Quelquestrèsbonspluginspour les relations:
Utilisation d'une Metabox
Vouspouvez créer une relation simpleen utilisant desmétaboxes:
add_action( 'admin_init', 'add_meta_boxes' ); function add_meta_boxes() { add_meta_box( 'some_metabox', 'Movies Relationship', '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">Movies</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> } add_action( 'save_post', 'save_movie_field' ); function save_movie_field( $post_id ) { // only run this for series if ( 'series' != get_post_type( $post_id ) ) return $post_id; // verify nonce if ( empty( $_POST['movies_nonce'] ) || !wp_verify_nonce( $_POST['movies_nonce'], basename( __FILE__ ) ) ) return $post_id; // check autosave if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return $post_id; // check permissions if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; // save update_post_meta( $post_id, '_movies', array_map( 'intval', $_POST['movies'] ) ); }
Etpuis,pour obtenir la relation avec lesfilms sousforme de listepour lespublications de séries:
$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 } }
Using a Plugin
Some very good plugins for relationships:
Using a Metabox
You can build a simple relationship using metaboxes:
add_action( 'admin_init', 'add_meta_boxes' ); function add_meta_boxes() { add_meta_box( 'some_metabox', 'Movies Relationship', '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">Movies</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> } add_action( 'save_post', 'save_movie_field' ); function save_movie_field( $post_id ) { // only run this for series if ( 'series' != get_post_type( $post_id ) ) return $post_id; // verify nonce if ( empty( $_POST['movies_nonce'] ) || !wp_verify_nonce( $_POST['movies_nonce'], basename( __FILE__ ) ) ) return $post_id; // check autosave if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return $post_id; // check permissions if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; // save update_post_meta( $post_id, '_movies', array_map( 'intval', $_POST['movies'] ) ); }
And then, to get the movies relationship as a list for series posts:
$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 } }
-
J'aime l'idée avec lesmetaboxes (enessayant d'éviter lesplugins)!I like the idea with the metaboxes (trying to avoid plugins)!
- 3
- 2014-01-05
- CoalaArmy
-
Sans créer un autre article,pouvons-nous ajouter à cela comment créer unpermalien àpartir de cette relationparent/enfant?Parexemple: `http://domaine.com/nom-série/nom-film`?Without creating another post, can we add to this how to create a permalink from this parent/child relationship? For example: `http://domain.com/series-name/movie-name`?
- 0
- 2015-04-08
- Xtremefaith
-
@Xtremefaith celapeut êtrefait avec un autre code.Il y a unplugin quej'ai créépour les catégories.Peut-être que vouspouvez l'utiliser comme référence.https://wordpress.org/plugins/hierarchical-urls/@Xtremefaith this can be done with other code. There's a plugin I created for categories. Maybe you can use as a reference. https://wordpress.org/plugins/hierarchical-urls/
- 0
- 2016-08-07
- vmassuchetto
-
- 2014-01-05
Je recommande leplugin Posts 2 Posts ,queje viens de commencer à utiliser.
Il vouspermet de créer des relationsplusieurs-à-plusieursentre les articleset lestypes depage,ce qui signifie que vouspouvez lier des
movies
à desseries
,et àtout autre CPT que vouspourriez créer.Ceplugin vouspermet également de créer des métadonnées de connexion qui vouspermettrontpour obtenir des détailsplusfins lors de la création de vos connexions.Ilest assezflexible dans son utilisation,permettant de contrôler lesmétaboxes d'administration,lestypes de connexionet lesmoyens d'afficher vos connexions sur lefront-end.Enfin,ilest bien documenté .
I recommend the Posts 2 Posts plugin, which I've just started using.
It allows you to create many-to-many relationships between posts and page types, meaning you can link
movies
toseries
, and any other CPTs you may create.This plugin also allows you to create connection metadata which will allow you to get finer detail when creating your connections. It is quite flexible in its usage, allowing for control over admin metaboxes, connection types, and ways to display your connections on the front end. Lastly, it is well-documented.
-
Je vais yjeter un œil.I'll take a look at it.
- 0
- 2014-01-05
- CoalaArmy
-
Je cherchais qc.similaireset essayé diverses solutions.Je dois dire que celui-ci (Post 2 Post) étaitparfait,cen'estpeut-êtrepas ce qu'un "non-programmeur" recherchait,mais si vous cherchezplus de qc.comme unebibliothèque à utiliser dans votremodèle,que c'estjusteparfait,bien documenté,bien intégré,obtenez-le!;)Iwas looking for sth. similar and tried various solutions. I have to say that this one (Post 2 Post) was perfect, it might not be what a 'non-programmer' would be looking for, but if you are looking more for sth. like a library to use in your template, than this is just perfect, well documented, well integrated, get it! ;)
- 0
- 2014-12-18
- Larzan
-
J'aifait unpetit pluginpour les relations depublicationmais https://wordpress.org/plugins/softmixt-relationsI did a small plugin for post relations but https://wordpress.org/plugins/softmixt-relations
- 0
- 2017-07-04
- Softmixt
-
- 2018-01-29
Malheureusement,leplugin Posts 2 Postsest obsolèteet n'estplusmaintenu.Ilexiste unnouveauplugin alternatifpour ces MB Relationships .Ilestinspiré du P2Pet fournit une API similairepour créer des relationsentre les articles,lestermeset les utilisateurs.
MB Relationshipsprenden charge les relationsbidirectionnellespar défautet utilise unetablepersonnaliséepour stocker les relations (comme le P2P)pour unemeilleureperformance (que lapublication deméta).
Cela vaut lapeine dejeter un œil auplugin.
Unfortunately, the Posts 2 Posts plugin is deprecated and no longer maintained. There is a new alternative plugin for that MB Relationships. It's inspired by P2P and provides a similar API to create relationships between posts, terms and users.
MB Relationships supports bi-directional relationships by default and use a custom table to store relationships (like P2P) for a better performance (than post meta).
It's worth taking a look at the plugin.
Je souhaite créer unebase de données de sériestélévisées à l'aide de WordPress.J'ai suivi quelquestutorielset j'ai deuxtypes d'articlespersonnalisés: unpour les
movies
,unpouretseries
.J'ai suivi cepostpour la structure .