Как вставить содержимое из другого пользовательского типа записи в запись?


Допустим, у меня есть пользовательский тип записи под названием "Исполнители". Это заполняется разными группами/исполнителями. В этих сообщениях есть изображение, а также пользовательские поля (mp3-файл, ссылка на facebook, ссылка на myspace и т. Д.).

У меня есть другой пользовательский тип записи под названием "События".

Когда я создаю новое сообщение о событии, я хотел бы, чтобы у меня было поле для выбора одной из групп из пользовательского типа сообщения "Исполнители".

При этом будут вставлены все данные из конкретная группа/Исполнитель в сообщении о событии (настраиваемые поля, рекомендуемое изображение и т.д.).

Каков наилучший способ вставки/введения такого рода цикла от администратора "События"?

Author: Jan Fabry, 2011-01-29

1 answers

В настоящее время лучший способ, который я знаю, чтобы справиться с этим, - это Сообщения 2 Плагин сообщений:

Вот пример, показывающий, как настроить пользовательские типы сообщений (если они у вас уже есть, это больше для пользы других, кто может это читать), а также вызов функции p2p_register_connection_type(), необходимый плагину для настройки отношений сообщений. Это может быть включено в вашу тему functions.php файл или в файле .PHP для плагина вы можете написать:

add_action('init','event_performer_init');
function event_performer_init() {
  register_post_type('event',
    array(
      'label'           => 'Events',
      'public'          => true,
      'show_ui'         => true,
      'query_var'       => 'event',
      'rewrite'         => array('slug' => 'events'),
      'hierarchical'    => true,
      //'supports'      => array('title','editor','custom-fields'),
    )
  );
  register_post_type('performer',
    array(
      'label'           => 'Performers',
      'public'          => true,
      'show_ui'         => true,
      'query_var'       => 'performer',
      'rewrite'         => array('slug' => 'performers'),
      'hierarchical'    => true,
      //'supports'      => array('title','editor','custom-fields'),
    )
  );
  if ( function_exists('p2p_register_connection_type') )
    p2p_register_connection_type( 'event', 'performer' );

  global $wp_rewrite;
  $wp_rewrite->flush_rules(false);  // This only needs be done first time
}

Затем в файле шаблона вашей темы single-event.php вы можете добавить код, подобный следующему, для отображения информации о каждой полосе (Я показал основы здесь; Я оставлю вас, чтобы вы заполнили все детали и/или задали другие более конкретные вопросы здесь, на сайте ответов WordPress, например, если вам нужно знать, как получить показанное изображение и т. Д.)

<?php
  if (count($performers = p2p_get_connected($post->ID))) {
    foreach($performers as $performer_id) {
      $performer = get_post($performer_id);
      echo 'The Band: ' . apply_filters('the_title',$performer->post_title);
      echo 'Facebook Link: ' . get_post_meta($post->ID,'facebook_link',true);
    }
  }
?>
 3
Author: MikeSchinkel, 2011-01-29 22:29:40