Как Мне Использовать Плагин Wordpress, Публикующий 2 Сообщения от Scribu?


У меня есть сайт Wordpress, который довольно сильно зависит от отношений. Это веб-сайт звукозаписывающего лейбла, на котором артисты могут быть связаны с турами, обзорами, выпусками альбомов и хранением товаров по всему сайту.

Я нашел плагин Сообщения к сообщениям от Scribu, который, кажется, делает то, что я хочу, но я не понимаю, как его правильно использовать. Скрибу опубликовал пример кода, но по какой-то причине я просто не могу его понять.

Вот пример того, что я хочу делайте это с сайтом, над которым я работаю.

Страница Туров.

Элемент тура имеет название и пользовательское мета-поле под названием "tickets_link"

При загрузке страницы туров все туры будут показаны с назначенным исполнителем, и если на ней есть ссылка на билеты, то также покажите это.

Если кто-нибудь здесь сможет понять код, размещенный на сайте Scribu для плагина, а затем объяснить его мне, я был бы благодарен за это.


Вот мой код из functions.php файл, регистрирующий подключения:

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

Псевдокод, чтобы показать, что я хочу сделать в своем коде:

  • Извлеките все туры из архива пользовательских записей "Мои туры", используя цикл, в котором все туры добавляются на сайт.
  • Каждый тур связан с исполнителем, поэтому отобразите все туры для конкретного исполнителя.
  • Элементы представлены в виде заголовка (имя исполнителя), и каждый элемент представляет собой тур, связанный с конкретным исполнителем в серверная часть с использованием метабокса, который отображается в результате регистрации соединения.

Дальнейшее обновление вместе с кодом, который я использую, и значениями print_r.

У меня есть связанные исполнители, которые отображаются в содержимом моего запроса print_r, где раньше этого не было. Когда я делаю print_r, я получаю следующее, что отображается, но нет способа получить доступ к данным.

[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

Код, который я использую для связи артистов с турами, следующий:

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

Обновление для 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;
Author: Travis Northcutt, 2011-03-13

1 answers

Хорошо, итак, идея в том, что у вас есть внешний цикл, который отображает туры.

И затем у вас есть внутренний цикл, который отображает каждого исполнителя.

Способ работы Цикла заключается в том, что он заполняет множество глобальных переменных, таких как $post, поэтому он выглядит как волшебство.

Давайте рассмотрим более единообразный подход:

$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/>';
    }
}

Обновление: Этот ответ устарел; текущий пример см. в разделе https://github.com/scribu/wp-posts-to-posts/wiki/Looping-The-Loop

 4
Author: scribu, 2012-10-08 12:42:48