2017-04-08 17 views
0

私はPosts 2 Posts pluginを使用しています。私は多くの異なるポストタイプと多くの異なる接続タイプを持っています。投稿間のWP_Query接続

私はそう

function register_post_type_connections() { 
$connection_post_types = array('person', 'nonprofit', 'business', 'article', 'event', 'structure', 'government'); 
foreach($connection_post_types as $post_type){ 

    p2p_register_connection_type(array(
     'name' => $post_type .'_to_structure', 
     'from' => $post_type, // use $my_post_types if you didn't define $temp_array 
     'to' => 'structure', 
     'reciprocal' => false, 
     'duplicate_connections' => true, 
     'sortable' => true, 
    )); 
} 
// Foreach repeated for each $connection_post_types 
} 
add_action('p2p_init', 'register_post_type_connections'); 

foreach文のようにすべてのそれらの関係を作成するには、すべての可能な組み合わせを取得するには、この機能では合計7回繰り返されます。私は結果をテストし、正しく動作します。

多くの接続が作成され、個々のポストページに添付されます。これらのすべての接続のリストを表示したいと思います。

私はその後、私はここで

$post_types = array('person', 'nonprofit', 'business', 'article', 'event', 'structure', 'timeline', 'government'); 
    $connection_types = get_all_connection_types(); 
    $connected = new WP_Query(array(
     'connected_type' => $connection_types, 
     'post_type' => $post_types, 
     'connected_items' => 'any', 
     'connected_direction' => 'to', 
     'posts_per_page' => 20, 
     'orderby' => 'meta_value', 
     'connected_orderby' => 'date', 
     'connected_order' => 'desc' 

    ));   
    echo '<ul>'; 
    if ($connected->have_posts()) { 
     while ($connected->have_posts()) : 
     $connected->the_post(); 

私のループを実行し、この

function get_all_connection_types() { 
    $connection_types = array(); 
    $connection_post_types = array('person', 'nonprofit', 'business', 'article', 'event', 'structure', 'government'); 
    foreach($connection_post_types as $post_type){ 
     $connection_types[] = $post_type .'_to_person'; 
     $connection_types[] = $post_type .'_to_nonprofit'; 
     $connection_types[] = $post_type .'_to_business'; 
     $connection_types[] = $post_type .'_to_article'; 
     $connection_types[] = $post_type .'_to_event'; 
     $connection_types[] = $post_type .'_to_structure'; 
     $connection_types[] = $post_type .'_to_government'; 
    } 
    return $connection_types; 
} 

のようなすべての接続タイプの完全なリストを取得するには、データベースからの私の接続は

enter image description here

です

私のループはperson_to_person接続のみを返しています。だから私は

$connection_types = array('person_to_structure', 'person_to_person'); 

これは私にperson_to_structure接続ではなくperson_to_personを与える。..にconnected_typeを変更することでテストしました。

なぜですか?

答えて

1

「connected_direction」を正確な長さの配列として渡す必要があります。「connected_type」は、これをインデックスファイルのこのコードに変更します。

$post_types = array('person', 'nonprofit', 'business', 'article', 'event', 'structure', 'timeline', 'government'); 
$connection_types = get_all_connection_types(); 
$direction_array = array(); 
for($i=0;$i<count($connection_types);$i++) { 
    $direction_array[$i] = 'from'; // if you want then you can send the from as well; 
} 
$connected = new WP_Query(array(
    'connected_type' => $connection_types, 
    'post_type' => $post_types, 
    'connected_items' => 'any', 
    'connected_direction' => $direction_array, 
    'posts_per_page' => 20, 
    'orderby' => 'meta_value', 
    'connected_orderby' => 'date', 
    'connected_order' => 'desc' 
)); 

これは動作します。

関連する問題