멀티 사이트의 사이트에서 게시물을 받으시겠습니까?


17

여러 사이트 게시물을 가져 오려고합니다. 예를 들어, 카테고리 및 총 게시물 10으로 단일 사이트 게시물을 가져올 수 있습니다.

그러나 두 개의 개별 멀티 사이트 블로그 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이 Beethoven 이고 사이트 4가 Bach 인 위의 예제에 대한 데모 스크린 샷입니다 .

데모

추신 : @ -brasofilo 덕분에 ;-) 에 대한 나의 오해를 분명히 하는 링크 를 제공합니다.restore_current_blog()

PPS : 다음 의견을 보내 주신 @ChristineCooper에게 감사드립니다.

친절한 경고입니다. 원래 블로그 ID를 변수로 설정하지 않아야합니다. $blog_id이는 switch_to_blog() 프로세스 중에 $blog_id핵심 기능에 의해 무시 되기 때문입니다 . 즉, 원래 블로그로 다시 전환하려고하면 마지막 블로그로 전환하게됩니다. 당신이 반복 한. 약간의 수수께끼. :)


여기에 내 게시물을로드 하는 방법이 있습니다. pastie.org/7827649 블로그 ID로 언급 한 것처럼 특정 언어로 블로그 1을 각 블로그 ID로 분류하고 블로그 2는 카테고리 비디오를 가지며 블로그 2는 카테고리 뉴스도 가져옵니다. 총 10 개의 게시물로 제한됩니다.
DeadArtcore

1
다른 카테고리를 지원하도록 답변을 업데이트했습니다.
birgire

1
추신 : 예제를 다시 업데이트 했으므로 ;-) the_title()대신 템플릿 태그를 사용할 수 있습니다 $post->post_title. 프로젝트를 마칠 수 있도록 충분한 정보를 주었으면합니다.
birgire

1
교체 foreach($rightbox as $post)foreach($posts as $post)당신의 pastie에.
birgire

1
업데이트 된 답변 @ChristineCooper
birgire에

0

내 "Multisite Post Reader"플러그인 https://wordpress.org/plugins/multisite-post-reader/ 의 코드를 살펴보십시오 . 다른 답변의 기술을 사용하여 게시물을 반복합니다. 또한 이미지와 동일한 작업을 수행하는 플러그인이 있습니다.

오픈 소스 코드이기 때문에 코드를 돌아 다니며 자신의 용도로 코드 조각을 사용하는 것이 좋습니다. (일부 코드는 내가 찾은 오픈 소스 코드에서 수정되었습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.