Nhận bài viết từ các trang web trong Multisite?


17

Tôi đang cố gắng để kéo nhiều bài viết trang web. Ví dụ: tôi có thể lấy ra một bài đăng trang web theo danh mục và tổng số bài đăng 10.

Nhưng tôi đang cố gắng rút cả hai bài đăng từ hai blog Multisite riêng biệt 1 & 2. Nhưng chỉ có blog 1 hoạt động. Ngoài ra, tôi muốn lấy ra một danh mục khác từ blog 1 và blog 2 theo danh mục khác. Làm thế nào tôi có thể đạt được điều này?

Đây là những gì tôi đang cố gắng làm:

<?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 ?>

Câu trả lời:


12

Hàm WordPress switch_to_blog()mong đợi một số nguyên làm tham số đầu vào. Bạn có thể đọc thêm về nó trong Codex:

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

Vui lòng thử loại cấu trúc này thay thế:

// 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 ); 

Cập nhật:

Nếu bạn muốn tìm nạp các bài đăng từ các danh mục khác nhau cho mỗi blog, bạn có thể sử dụng ví dụ:

// 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 ); 

Thí dụ:

Dưới đây là một ví dụ cho phép bạn sử dụng thẻ mẫu (cách này hoạt động trên cài đặt nhiều trang của tôi):

// 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();

Dưới đây là ảnh chụp màn hình demo cho ví dụ trên của chúng tôi với trang 1 có tên Beethoven và trang 4 có tên Bach :

bản giới thiệu

PS: Cảm ơn @brasofilo cung cấp liên kết làm rõ sự hiểu lầm của tôi về restore_current_blog();-)

PPS: Cảm ơn @ChristineCooper đã chia sẻ nhận xét sau:

Chỉ là một cảnh báo thân thiện. Đảm bảo không đặt id blog ban đầu của bạn thành biến $blog_id- điều này là do trong switch_to_blog() quá trình, $blog_idsẽ bị ghi đè bởi chức năng cốt lõi, nghĩa là khi bạn cố gắng chuyển về blog ban đầu, bạn sẽ kết thúc bằng việc chuyển sang cuối cùng một bạn vòng qua. Một chút của một câu đố tâm trí. :)


dưới đây là cách tôi tải bài viết của tôi pastie.org/7827649 làm thế nào tôi có thể thực hiện điều đó vào điều này cũng giống như tôi đề cập đến bởi cả id viết blog nhưng mỗi id blog của loại cụ thể blog của 1 sẽ có thể loại video và blog 2 sẽ có những tin tức loại cũng có được tổng số bài viết là 10 giới hạn.
DeadArtcore

1
Tôi cập nhật câu trả lời để hỗ trợ các loại khác nhau.
bạch dương

1
ps: đã cập nhật lại ví dụ, vì vậy bạn có thể sử dụng các thẻ mẫu như the_title()thay vì $post->post_title;-) Tôi hy vọng tôi đã cung cấp cho bạn đủ thông tin để bạn có thể hoàn thành dự án của mình.
bạch dương

1
Thay thế foreach($rightbox as $post)bằng foreach($posts as $post)trong pastie của bạn.
bạch dương

1
Hy vọng nó ổn khi tôi thêm bình luận của bạn vào câu trả lời được cập nhật @ChristineCooper
birgire

0

Hãy xem mã trong plugin "Multisite Post Reader" của tôi https://wordpress.org/plugins/multisite-post-reader/ . Nó sử dụng các kỹ thuật trong câu trả lời khác để lặp qua các bài viết. Tôi cũng có các plugin làm điều tương tự cho hình ảnh.

Vì nó là một mã nguồn mở, bạn có thể đi lang thang qua mã và sử dụng các đoạn mã để sử dụng cho riêng bạn. (Một số mã được sửa đổi từ mã nguồn mở tôi đã tìm thấy.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.