Отримуйте публікації з сайтів у Мультисайті?


17

Я намагаюся витягнути кілька публікацій на сайтах. Наприклад, я можу витягнути окремі повідомлення на сайті за категоріями та загальною кількістю публікацій 10.

Але я намагаюся витягнути обидві публікації з двох окремих блогів Multisite 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()очікує ціле число як вхідний параметр. Детальніше про це ви можете прочитати в Кодексі:

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 за те, що він поділився таким коментарем:

Просто дружнє попередження. Переконайтеся, що ви не встановлюєте свій вихідний ідентифікатор блогу змінною $blog_id- це тому, що під час switch_to_blog() процесу $blog_idбуде переосмислена основна функція, тобто те, що, коли ви спробуєте повернутися до початкового блогу, ви закінчитеся з переключенням на останню той, який ви прокрутили через. Трохи розуму-головоломки. :)


ось як я завантажую свої повідомлення pastie.org/7827649 як я можу реалізувати це в цьому також, як я згадую обидва ідентифікатори блогу, але кожен ідентифікатор блогу за певним блогом категорії 1 матиме відео про категорії, а в блозі 2 з'являться новини категорії також загальний допис 10 лімітів.
DeadArtcore

1
Я оновив відповідь на підтримку різних категорій.
birgire

1
ps: оновив приклад ще раз, тож ви можете використовувати теги шаблонів на зразок 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/ . Він використовує техніку в іншій відповіді, щоб прокручувати пости. У мене також є плагіни, які роблять те ж саме для зображень.

Оскільки це код з відкритим кодом, ви можете побродити по коду і використовувати його частини для власного використання. (Частина коду модифікована із знайденого я відкритого коду.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.