マルチサイトのサイトから投稿を取得しますか?


17

複数のサイトの投稿をプルしようとしています。たとえば、カテゴリごとの1つのサイト投稿と合計投稿数10を引き出すことができます。

しかし、2つの別々のマルチサイトブログ1と2から両方の投稿を引き出しようとしています。しかし、ブログ1のみが機能します。また、ブログ1とブログ2から別のカテゴリーを抽出します。どうすればこれを達成できますか?

これが私がやろうとしていることです:

<?php
global $switched;
switch_to_blog(1,2); //switched to 1 & 2 but only 1 working

// Get latest Post
$latest_posts = get_posts('&cat=64&showposts=10');
$cnt =0;?> 
    <ul>
    <?php foreach($latest_posts as $post) : setup_postdata($post);?>
    <li>
        <a href="<?php echo get_page_link($post->ID); ?>" title="<?php echo $post->post_title; ?>"><?php echo  short_title('...', 7); ?></a>
    </li>                                
<?php endforeach ; ?>

<?php restore_current_blog(); //switched back to main site ?>

回答:


12

WordPress関数でswitch_to_blog()は、入力パラメーターとして整数が必要です。Codexで詳細を読むことができます:

http://codex.wordpress.org/Function_Reference/switch_to_blog

代わりにこの種の構造を試してください:

// Get the current blog id
$original_blog_id = get_current_blog_id(); 

// All the blog_id's to loop through
$bids = array( 1, 2 ); 

foreach( $bids as $bid )
{
    // Switch to the blog with the blog_id $bid
    switch_to_blog( $bid ); 

    // ... your code for each blog ...
}

// Switch back to the current blog
switch_to_blog( $original_blog_id ); 

更新:

ブログごとに異なるカテゴリから投稿を取得する場合は、たとえば次を使用できます。

// Get current blog
$original_blog_id = get_current_blog_id(); 

// Setup a category slug for each blog id, you want to loop through - EDIT
$catslug_per_blog_id = array( 
    1 => 'video',
    4 => 'news' 
); 

foreach( $catslug_per_blog_id as $bid => $catslug )
{
    // Switch to the blog with the blog id $bid
    switch_to_blog( $bid ); 

    // ... your code for each blog ...
    $myposts = get_posts( 
        array( 
            'category_name'  => $catslug,
            'posts_per_page' => 10, 
        )
    );
    // ... etc
}

// Switch back to the current blog
switch_to_blog( $original_blog_id ); 

例:

テンプレートタグを使用できるようにする例を次に示します(これは私のマルチサイトインストールで機能します)。

// Get current blog
$original_blog_id = get_current_blog_id();

// Setup a category for each blog id you want to loop through - EDIT
$catslug_per_blog_id = array( 
    1 => 'video',
    4 => 'news' 
); 

foreach( $catslug_per_blog_id as $bid => $catslug )
{
    //Switch to the blog with the blog id $bid
    switch_to_blog( $bid ); 

    // Get posts for each blog
    $myposts = get_posts( 
        array( 
            'category_name'  => $catslug,
            'posts_per_page' => 2, 
        )
    );

    // Skip a blog if no posts are found
    if( empty( $myposts ) )
        continue;

    // Loop for each blog
    $li = '';
    global $post;
    foreach( $myposts as $post )
    {
        setup_postdata( $post );
        $li .= the_title(
            $before = sprintf( '<li><a href="%s">', esc_url( get_permalink() ) ),
            $after  = '</a></li>',
            $echo   = false
        );
    }

    // Print for each blog
    printf(
        '<h2>%s (%s)</h2><ul>%s</ul>',
        esc_html( get_bloginfo( 'name' ) ),
        esc_html( $catslug ),
        $li  
    );
}

// Switch back to the current blog
switch_to_blog( $original_blog_id ); 

wp_reset_postdata();

以下は、上記の例のサイト1がベートーベン、サイト4がバッハのデモスクリーンショットです。

デモ

PS:@brasofiloが私の誤解を明確にするリンクを提供してくれてありがとうrestore_current_blog();-)

PPS:次のコメントを共有してくれた@ChristineCooperに感謝します。

ただフレンドリーな警告。オリジナルのブログIDを変数に設定しないようにしてください$blog_id-これは、switch_to_blog() プロセス中に$blog_idコア機能によってオーバーライドされるためです。つまり、元のブログに切り替えようとすると、最後のブログループしました。少し頭を悩ます。:)


投稿を読み込む方法は次のとおりです。pastie.org/7827649両方のブログIDで言及するように、これを実装する方法投稿の合計は10に制限されています。
DeadArtcore

1
さまざまなカテゴリをサポートするために回答を更新しました。
ビルジール

1
ps:例を再度更新したためthe_title()$post->post_title;-)の代わりに次のようなテンプレートタグを使用できます。プロジェクトを終了できるように十分な情報を提供していただければ幸いです。
バージール

1
交換するforeach($rightbox as $post)foreach($posts as $post)、あなたのpastieに。
バージール

1
更新された回答@ChristineCooper
birgire

0

「Multisite Post Reader」プラグインhttps://wordpress.org/plugins/multisite-post-reader/のコードを見てください。他の回答の手法を使用して、投稿をループします。画像に対して同じことをするプラグインもあります。

これはオープンソースのコードであるため、コードをさまようこともできますし、自分で使用するためにその一部を使用することもできます。(コードの一部は、私が見つけたオープンソースコードから変更されています。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.