मल्टीसाइट में साइटों से पोस्ट प्राप्त करें?


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

वर्डप्रेस फ़ंक्शन 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 के साथ हमारे उपरोक्त उदाहरण के लिए एक डेमो स्क्रीनशॉट है :

डेमो

पुनश्च: लिंक की मेरी गलतफहमी को स्पष्ट करने वाले लिंक प्रदान करने वाले @brasofilo को धन्यवाद ; restore_current_blog();-)

PPS: निम्न टिप्पणी साझा करने के लिए @ChristineCooper का धन्यवाद:

बस एक दोस्ताना चेतावनी। सुनिश्चित करें कि अपनी मूल ब्लॉग आईडी को चर पर सेट न करें $blog_id- ऐसा इसलिए है क्योंकि इस switch_to_blog() प्रक्रिया के दौरान , $blog_idकोर फ़ंक्शन द्वारा ओवरराइड किया जाएगा, जिसका अर्थ है कि जब आप मूल ब्लॉग पर वापस स्विच करने का प्रयास करेंगे, तो आप अंतिम पर स्विच करने के साथ समाप्त हो जाएंगे। एक तुम के माध्यम से पाला। थोड़ा सा दिमाग-पहेली। :)


यहाँ मैं अपने पोस्ट pastie.org /7827649 को कैसे लोड कर सकता हूं, मैं इसे कैसे लागू कर सकता हूं, जैसे कि मैं दोनों ब्लॉग आईडी द्वारा उल्लेख करता हूं, लेकिन विशिष्ट श्रेणी ब्लॉग 1 के प्रत्येक ब्लॉग आईडी में श्रेणी वीडियो होंगे और ब्लॉग 2 में श्रेणी समाचार भी होंगे 10 सीमा के कुल पद।
डेडआर्टकोर

1
मैंने विभिन्न श्रेणियों का समर्थन करने के लिए उत्तर अपडेट किया।
बिरगी

1
ps: फिर से उदाहरण को अपडेट किया, ताकि आप ;-) के the_title()बजाय टेम्प्लेट टैग का उपयोग कर सकें, $post->post_titleमुझे आशा है कि मैंने आपको पर्याप्त जानकारी दी है ताकि आप अपनी परियोजना को समाप्त कर सकें।
११:३० बजे

1
बदलें foreach($rightbox as $post)के साथ foreach($posts as $post)अपने pastie में।
बीरगीर

1
आशा है कि यह ठीक है कि मैंने आपकी टिप्पणी को अपडेटेड उत्तर @ChristineCooper
birgire

0

मेरे "मल्टीसाइट पोस्ट रीडर" प्लगइन के कोड पर एक नज़र डालें https://wordpress.org/plugins/multisite-post-reader/ । यह पोस्ट के माध्यम से लूप के दूसरे उत्तर में तकनीक का उपयोग करता है। मेरे पास प्लगइन्स भी हैं जो छवियों के लिए एक ही काम करते हैं।

चूंकि यह एक ओपन-सोर्स कोड है, आप कोड के माध्यम से घूमने और अपने स्वयं के उपयोग के लिए इसके टुकड़ों का उपयोग करने के लिए स्वागत करते हैं। (कोड में से कुछ को मैंने पाया ओपन-सोर्स कोड से संशोधित किया गया है।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.