web-dev-qa-db-fra.com

Comment utiliser le plugin Wordpress Messages 2 Messages par Scribu?

J'ai un site Wordpress qui s'appuie beaucoup sur les relations. Il s’agit d’un site Web pour maisons de disques où les artistes peuvent être associés à des tournées, des critiques, des sorties d’album et des articles de magasins tout au long du site.

J'ai trouvé le plugin Messages aux messages de Scribu qui semble faire ce que je veux, mais je ne comprends pas comment l'utiliser correctement. Scribu a posté un exemple de code, mais pour une raison quelconque, je ne le comprends tout simplement pas.

Voici un exemple de ce que je veux faire avec le site sur lequel je travaille.

Page Tours.

Un élément de la tournée a un titre et un champ méta personnalisé appelé 'tickets_link'

Lors du chargement de la page des visites, toutes les visites seront affichées avec l'artiste qui leur a été attribué. Si un lien de billets est associé, montrez-le également.

Si quelqu'un ici peut comprendre le code publié sur le site de Scribu pour le plug-in et me l'expliquer, je l'apprécierais avec gratitude.


Voici mon code du fichier functions.php enregistrant les connexions:

    function my_connection_types() {
    if ( !function_exists('p2p_register_connection_type') )
        return;

    p2p_register_connection_type( 'tours', 'artists' );
    p2p_register_connection_type( 'homepage_carousel', 'artists' );
    p2p_register_connection_type( 'duka', 'artists' );
    p2p_register_connection_type( 'products_carousel', 'artists' );
}
  add_action('init', 'my_connection_types', 100);

Pseudo-code pour montrer ce que je veux faire dans mon code:

  • Récupérez toutes les visites dans mes archives postales personnalisées en utilisant une boucle qui obtient toutes les visites ajoutées au site.
  • Chaque visite est liée à un artiste, donc affichez toutes les visites pour un artiste en particulier.
  • Les éléments se présentent sous la forme d’un titre (nom de l’artiste) et chaque élément est une visite qui a été associée à un artiste particulier dans le backend à l’aide de la metabox qui apparaît suite à l’enregistrement d’une connexion.

Nouvelle mise à jour avec le code que j'utilise et les valeurs print_r.

Les artistes liés apparaissent dans le contenu de ma requête print_r alors qu'avant je ne le faisais pas. Quand je fais un print_r j'obtiens ce qui suit qui apparaît, mais aucun moyen d'accéder aux données.

[connected_connected] => Array ( [0] => stdClass Object ( [ID] => 245 [post_author] => 1 [post_date] => 2011-03-10 13:55:23 [post_date_gmt] => 2011-03-10 13:55:23 [post_content] => [post_title] => 1200 Techniques [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => 1200-techniques [to_ping] => [pinged] => [post_modified] => 2011-03-10 13:55:23 [post_modified_gmt] => 2011-03-10 13:55:23 [post_content_filtered] => [post_parent] => 0 [guid] => http://localhost/testdev/?post_type=artists&p=245 [menu_order] => 0 [post_type] => artists [post_mime_type] => [comment_count] => 0 [p2p_id] => 2 [p2p_from] => 215 [p2p_to] => 245

Le code que j'utilise pour associer des artistes à des tournées est le suivant:

$connected = new WP_Query(array(
    'post_type' => 'tours',
    'nopaging' => true,
    'each_connected' => array(
        'post_type' => 'artists',
        'nopaging'  => true,
    ),
    'suppress_filters' => false
));

while( $connected->have_posts() ): $connected->the_post();
    the_title();
    echo "<br />";
endwhile;   

print_r($connected); // Print_r for showing contents of post object.

Mise à jour pour Scribu:

$args = array
(
    'post_type'        => 'tours',
    'nopaging'         => true,
    'suppress_filters' => false
);

$connected = new WP_Query($args);

while($connected->have_posts()): $connected->the_post();

    the_title();
    echo "<br />";

    foreach ($connected->connected AS $tour_item)
    {
        echo get_the_title($tour_item->ID);
        echo "<br />";
    }

endwhile;
5
Dwayne Charrington

Ok, donc l’idée est que vous avez une boucle externe, qui affiche les visites.

Et puis vous avez une boucle intérieure, qui affiche chaque artiste.

Le fonctionnement de la boucle consiste à renseigner un grand nombre de variables globales, telles que $post, de sorte que cela ressemble à de la magie.

Regardons une approche plus uniforme:

$tours = get_posts( array(
    'post_type' => 'tours',
    'nopaging' => true,
    'each_connected_to' => array(
        'post_type' => 'artists',
        'nopaging' => true,
    ),
    'suppress_filters' => false
) );

// outer loop
foreach ( $tours as $tour ) {
    echo get_the_title( $tour->ID );
    echo get_post_meta( $tour->ID, 'ticket_link', true );

    // inner loop
    foreach ( $tour->connected_to as $artist ) {
        echo get_the_title( $artist->ID );
        echo '<br/>';
    }
}

Update: Cette réponse est obsolète. pour un exemple actuel, voir https://github.com/scribu/wp-posts-to-posts/wiki/Looping-The-Loop

4
scribu