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に保存される時にシリアル化されるため、正規表現の記述の仕方に気をつける必要がある。
きっともっと良い書き方があると思うので、良い方法をご存知の方は教えてほしい。