私の設定は以下の通りです
私は 'events'という名前のカスタム投稿タイプと 'genres'という名前のカスタム投稿タイプを持っています。これらはscribuのPosts2Postsプラグインとリンクしています。各イベントには複数のジャンルを関連付けることができます。
やりたいこと
イベントページで、現在のイベントのジャンルに基づいて関連する他のイベントを表示します。
私がすべきだと思うこと
私はconnected_itemsで与えられたジャンルの1つのAND/OR moreを持つすべてのイベントを出力したいP2Pクエリを持っています。ドキュメントと同じように、それらを配列として渡します。
私の結果を説明するために、それを言うことができます
最初のクエリで、すべてのジャンルIDを取得しましたが、これは機能します。
与えられたジャンルのすべてのイベントを取得する2番目のクエリ(それらを配列として渡します):
$args = array(
'connected_type' => 'genres_to_events',
'connected_items' => array(1240,1241,1242),
'post_status' => 'publish',
'posts_per_page' => -1,
);
$query = new WP_Query($args);
問題は、出力が配列内の各接続をチェックすることです。したがって、クエリの出力は次のようになります。
ただし、1つ以上のジャンルが関連付けられているかどうかに基づいて、各イベントを1回ずつ出力します。私はこれがドキュメンテーションで説明されているとは思わない、何か考え?
ああ、わかったと思います。私はあなたがあなたの最初のループですべきことはあなたが言うようにコネクテッドジャンルを得ることであると思います。それから、それらに関連するすべてのイベントを取得したいので、ループ内でIDだけを集めて(1つの配列に集めて)、array_unique()
を使ってすべての重複を取り除きます。このクリーンな配列をループに入れて、それらの投稿だけを取得します。理にかなって?
だから、このような何かがうまくいくかもしれません:
$args = array(
'connected_type' => 'genres_to_events',
'connected_items' => array(1240,1241,1242),
'post_status' => 'publish',
'posts_per_page' => -1,
);
$query = new WP_Query($args);
$connected_out = array();
while($query->have_posts()) : $query->the_post();
$connected_out[] = $post->ID;
endwhile;
$connected_out = array_unique($connected_out);
wp_reset_query();
$args = array(
'post__in' => $connected_out;
);
$query = new WP_Query($args);
// go!
これは部分的なものであり、コメントに含まれている以上の文字が必要なため、これを回答として投稿しています。大丈夫だと思います:-)。
だから私は this post を読んだ後にposts_per_page
問題を見つけました。
get_related
関数に引数を渡すことは可能ですが、p2pコアを修正しなければならないようです。私がしたのはget_related
という名前の私自身のmy_get_related
関数を追加することでした。
コードは以下のとおりです。
public function my_get_related( $item, $extra_qv = array(), $output = 'raw' ) {
$extra_qv['fields'] = 'ids';
$connected = $this->get_connected( $item, $extra_qv, 'abstract' );
$additional_qv = array( 'p2p:exclude' => _p2p_normalize( $item ), 'posts_per_page' => -1 );
return $this->flip_direction()->get_connected( $connected->items, $additional_qv, $output );
}
これをwp-content/plugins/posts-to-posts/core/directed-connection-type.phpに追加しました(オリジナルのget_related
関数は94行目にあります)。
'posts_per_page'
引数が追加されているのを見ることができます、それらをコンマで区切ることによってもっと簡単に追加することができます。
今、私はまだ1つ質問があります:どうやってp2pコアファイルの外側でこの関数を宣言するのですか?プラグインを更新するときに失敗する可能性があるので、ここには追加したくありません。それをfunctions.phpに追加したいのですが(Rootsテーマを使ってfunctions.php以外のファイルに入れますが、そこに入れるのはインクルードファイルなので同じです。 functions.phpの。
public function my_get_related...
とadd_action('p2p_init', 'my_get_related')
を試してみましたが、うまくいきません。
この機能をコアの外側に追加する方法について何かアイデアはありますか?
私はその後、問題がようやく解決したと思います:-)