web-dev-qa-db-ja.com

他のカスタム投稿タイプのコンテンツを投稿に挿入する方法

"Performers"というカスタム投稿タイプがあるとします。これは異なるバンド/パフォーマーで占められます。これらの投稿には、カスタムフィールド(mp3ファイル、facebookリンク、myspaceリンクなど)と同様に、おすすめの画像があります。

"Events"というカスタム投稿タイプがあります。

新しいイベント投稿を作成するときに、 "Performers"カスタム投稿タイプからバンドの1つを選択するためのドロップボックスを用意することを希望します。

これは特定のバンド/演奏者からの全てのデータをイベント投稿に挿入します(カスタムフィールド、特集画像など)。

"Event"管理者からこの種のループを挿入/挿入するための最良の方法は何ですか?

1
Joe

現在私がそれを処理するのに知っている最良の方法は、 投稿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内に、各Bandに関する情報を表示するための次のようなコードを追加できます(ここで基本を示しました。詳細をすべて記入したり、その他の質問をしたりします)。注目の画像の入手方法などを知る必要がある場合など、WordPress Answersサイトのより具体的な質問

<?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
MikeSchinkel