从多站点中的站点获取帖子?

时间:2013-05-10 作者:DeadArtcore

我正在尝试拉多个网站的帖子。例如,我可以按类别提取单个站点的帖子,总共10篇。

但我正试图从两个独立的多站点博客中抽出这两篇文章;但只有博客1起作用。另外,我想从blog 1和blog 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 ?>

2 个回复
最合适的回答,由SO网友:birgire 整理而成

WordPress功能switch_to_blog() 需要一个整数作为输入参数。您可以在法典中了解更多信息:

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名为巴赫:

demo

PS:感谢@brasofilo提供link 这澄清了我对restore_current_blog() ;-)

PPS:感谢@ChristineCooper分享以下评论:

只是一个友好的警告。确保不要将原始博客id设置为变量$blog_id -- 这是因为在switch_to_blog() 过程$blog_id 将被核心函数覆盖,这意味着当您尝试切换回原始博客时,最终将切换到循环通过的最后一个博客。有点让人困惑。:)

SO网友:Rick Hellewell

看看我的“Multisite Post Reader”插件中的代码https://wordpress.org/plugins/multisite-post-reader/ . 它使用另一个答案中的技巧来循环浏览帖子。我还有一些插件可以对图像执行同样的操作。

因为它是一个开源代码,所以欢迎您在代码中漫游,并使用其中的一些片段供自己使用。(其中一些代码是从我找到的开源代码修改而来的。)

结束

相关推荐

在Get_Categories中添加多个“Parent”

我使用下面提到的代码从父类别中获取前5个子类别(按帖子数量)。The code works fine, 然而,我需要添加更多的“父”类别,这样我就无法从多个父类别中获得前5个子类别的总数。Adding \'parent\' => \'599,588,590\', **Does not work.** The working code for single parent category.<?php $args=array( \'orderby\' => \'