WordPressで複数のカスタム投稿タイプを使っているサイトで、
カスタム投稿タイプAとカスタム投稿タイプBの投稿を紐付けたい。
となった場合に、僕の場合は、post_meta に投稿IDを配列で保持させていた。
例としては下記のように、カスタム投稿タイプとして分類をわけないと、一覧で表示されると違和感が出るけれど、どちらにも投稿レベルで管理したいケース。
- 車(car)
- 車のパーツ(car-parts)
これに、例えば以下のような投稿が紐付いているとする
- 車→【 suv(1) , minivan(8) , sedan(229) 】
- 車のパーツ→【 wheel-suv(381) , suspension-suv(493) , muffler-suv(527) , ………】
※ ()内は post_id
※ 車のパーツは以降も [パーツ名-車種]という命名規則でたくさん存在する
上記の状態で、例えばsuvのページで suv用の wheel, suspension , muffler などを呼び出したいとする。
その場合、suvの編集画面に post_meta で”関連パーツ(related-parts)”のような名称のフィールドを作成し、” 381 , 493 , 527 ” というように 配列でデータをもたせる。
その時に single-suv.php での呼び出しとしては、以下を使う
$car_parts = get_posts(array(
'post_type' => 'car-parts',
'post_status' => 'publish',
'posts_per_page' => -1,
' meta_query' => array(
array(
'key' => 'related-parts',
'value' => '[^0-9],?"'.$post->ID.'",?[^0-9]',
'compare' => 'REGEXP'
)
)
));
foreach( $car_parts as $car_part ){
// ここにループ処理を書く
}
WordPressの場合、配列はMySQLに保存される時にシリアル化されるため、正規表現の記述の仕方に気をつける必要がある。
きっともっと良い書き方があると思うので、良い方法をご存知の方は教えてほしい。