在多站点上:循环显示网络上最近发布的前四张图片

时间:2012-12-31 作者:jw60660

我想显示WordPress网络上帖子的前四幅图片。

在奥托家image gallery tutorial 他建议使用以下内容从最近的帖子中获取图像。查询参数:

$images = new WP_Query( array(
\'post_parent\' => get_the_ID(),
\'post_status\' => \'inherit\',
\'post_type\' => \'attachment\',
\'post_mime_type\' => \'image\',
\'order\' => \'ASC\',
\'orderby\' => \'menu_order ID\',
\'posts_per_page\' => 4,
\'post__not_in\' => array($thumb_id),
\'update_post_term_cache\' => false,
) );
然后在循环中执行以下操作以显示附件:

foreach ($images->posts as $image) {
echo \'<div class="gallery-image"><a href="\'.get_permalink($image->ID).\'">\'.wp_get_attachment_image( $image->ID, \'gallery-overview-thumb\' ).\'</a></div>\';
我正试图在网络中做同样的事情。

我开始尝试使用与“Sitewide Tags插件”相同的代码,但它不会显示子站点的图像,只显示从主站点仪表板创建的图像。

在网络上实现同样的功能是否需要更多的工作?

非常感谢。

1 个回复
最合适的回答,由SO网友:Pontus Abrahamsson 整理而成

这顿午餐我没什么事可做,所以我为此准备了一个小函数。主要是获取网络中的所有站点及其id。为此,我通过类使用一个简单的SQL查询wpdb:

$site_ids = $wpdb->get_results( "SELECT blog_id from $wpdb->blogs" );
它将返回blog_id. 当我有所有的网站都在运行foreachsite_idsswitch_to_blog 像这样:

// Within the foreach 
switch_to_blog( $site_id->blog_id );
在当前的博客中,我运行了一个简单的get_posts 返回附件数。

另一个foreach 在我收到的邮件上get_posts 使用array_push 设置post_date as键和post_id 作为值。post\\u日期用于使post在数组中唯一,然后根据时间戳对图像进行排序。

下一步是循环使用我们设置的数据post_date 作为键和post_id 作为使用函数获取图像的值wp_get_attachment_image(). 也将使用array_push 将时间戳添加为键,将图像添加为值。我们需要时间戳来对图像进行排序。(最新优先)使用krsort 在我们回显图像之前。

Here is the full code:

function wpse_77816_ms_last_images( $num_of_images, $size ) {
    global $wpdb;

    // Setup array
    $images = array();

    $site_ids = $wpdb->get_results( "SELECT blog_id from $wpdb->blogs" );

    foreach ( $site_ids as $site_id ) {

        // Swtch to blog
        // http://codex.wordpress.org/WPMU_Functions/switch_to_blog
        switch_to_blog( $site_id->blog_id );

            $posts = get_posts( array(
                \'numberposts\' => $num_of_images,
                \'post_type\'   => \'attachment\',
                \'post_mime_type\' => \'image\'
            ));

            // Setup array
            $data = array();

            foreach( $posts as $post ) {
                // return array with post_id and post_dates
                $data[strtotime( $post->post_date )] = $post->ID; 
            }

            // Get the images
            foreach( $data as $d => $id ) {
                $images[$d] = wp_get_attachment_image( $id, $size );
            }

        // Restor switch_to_blog
        restore_current_blog();
    }

    // Sort on high to low (time)
    krsort( $images );
    foreach( $images as $image ) {
        echo $image;
    }
}
function wpse_77816_ms_last_images( $num_of_images, $size ) {
    global $wpdb;

    // Setup array
    $images = array();

    $site_ids = $wpdb->get_results( "SELECT blog_id from $wpdb->blogs" );

    foreach ( $site_ids as $site_id ) {

        // Swtch to blog
        // http://codex.wordpress.org/WPMU_Functions/switch_to_blog
        switch_to_blog( $site_id->blog_id );

            $posts = get_posts( array(
                \'numberposts\' => $num_of_images,
                \'post_type\'   => \'attachment\',
                \'post_mime_type\' => \'image\'
            ));

            // Setup array
            $data = array();

            foreach( $posts as $post ) {
                // return array with post_id and post_dates
                $data[strtotime( $post->post_date )] = $post->ID; 
            }

            // Get the images
            foreach( $data as $d => $id ) {
                $images[$d] = wp_get_attachment_image( $id, $size );
            }

        // Restor switch_to_blog
        restore_current_blog();
    }

    // Sort on high to low (time)
    krsort( $images );
    foreach( $images as $image ) {
        echo $image;
    }
}
结束

相关推荐

Multisite Login Issues

我正在尝试正确设置Wordpress Multisite,我已经设置了所有站点,但只能访问主域的wp admin。我已经看到了各种修复方法,但它们只会导致更大的问题。我尝试将以下内容添加到wp config。php,根据几篇博客文章的说明,这是一个修复:define(\'ADMIN_COOKIE_PATH\', \'/\'); define(\'COOKIE_DOMAIN\', \'\'); define(\'COOKIEPATH\', \'\'); define(\'SITECO