it-swarm.com.de

Wie verwende ich das Wordpress Plugin Beiträge 2 Beiträge von Scribu?

Ich habe eine Wordpress-Site, die sehr stark auf Beziehungen angewiesen ist. Es ist eine Plattenlabel-Website, auf der Künstler mit Touren, Rezensionen, Albumveröffentlichungen und Artikeln auf der gesamten Website in Verbindung gebracht werden können.

Ich habe das Plugin Posts to Posts von Scribu gefunden, das zu tun scheint, was ich will, aber ich verstehe nicht, wie man es richtig benutzt. Scribu hat Beispielcode gepostet, aber aus irgendeinem Grund kann ich ihn einfach nicht verstehen.

Hier ist ein Beispiel dafür, was ich mit der Site machen möchte, an der ich arbeite.

Touren Seite.

Ein Tour-Element hat einen Titel und ein benutzerdefiniertes Metafeld namens "tickets_link".

Beim Laden der Tour-Seite werden alle Touren mit dem zugewiesenen Interpreten angezeigt. Wenn es einen Ticket-Link gibt, wird dieser ebenfalls angezeigt.

Wenn jemand hier den Code verstehen kann, der auf Scribus Website für das Plugin veröffentlicht wurde, und ihn mir dann erklärt, wäre ich dankbar dafür.


Hier ist mein Code aus der Datei functions.php, in der die Verbindungen registriert sind:

    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);

Pseudocode, um zu zeigen, was ich in meinem Code tun möchte:

  • Rufe alle Touren in meinem benutzerdefinierten Post-Archiv ab, indem du eine Schleife verwendest, in der alle Touren zur Site hinzugefügt werden.
  • Jede Tour ist einem Künstler zugeordnet. Zeigen Sie daher alle Touren für einen bestimmten Künstler an.
  • Die Elemente haben die Form einer Überschrift (Künstlername) und jedes Element ist eine Tour, die mit einem bestimmten Künstler im Back-End verknüpft wurde, wobei die Metabox verwendet wird, die als Ergebnis der Registrierung einer Verbindung angezeigt wird.

Weitere Aktualisierung zusammen mit dem von mir verwendeten Code und den print_r-Werten.

Ich habe die verwandten Künstler in meinem print_r-Inhalt meiner Anfrage, wo ich es vorher nicht getan habe. Wenn ich ein print_r mache, wird Folgendes angezeigt, aber es gibt keine Möglichkeit, auf die Daten zuzugreifen.

[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

Der Code, den ich verwende, um Künstler mit Touren in Verbindung zu bringen, ist der folgende:

$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.

Update für 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

Ok, die Idee ist, dass Sie eine äußere Schleife haben, die die Touren anzeigt.

Und dann haben Sie eine innere Schleife, die jeden Künstler anzeigt.

Die Art und Weise, wie The Loop funktioniert, ist, dass es viele globale Variablen wie $post füllt, so dass es aussieht wie Magie.

Schauen wir uns einen einheitlicheren Ansatz an:

$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: Diese Antwort ist veraltet; Ein aktuelles Beispiel finden Sie unter https://github.com/scribu/wp-posts-to-posts/wiki/Looping-The-Loop

4
scribu