黃聰:WordPress 多站點建站教程(三):主站如何調用子站的文章內容、SQL語句如何寫?

一、若是懂得編程的朋友能夠SQL語句,而後加上PHP函數等操做就能夠經過直接調用網站的數據庫信息來實現想要達到的目的。php

既然要用到SQL語句首先得對WordPress多站點數據庫有一個瞭解,多站點激活後會多出這麼幾張表wp_site,wp_sitemeta,wp_blogs,wp_blog_versions其中最重要的是wp_blogs這張表,它將你建立的每個子站點訪問地址,以及建立和修改時間等等都存到了這張表裏面。還有一點就是當你建立一個子站點後會多出一些中間帶有數字的數據表,好比wp_2_posts,wp_2_options等等,中間的數字2其實就是你wp_blogs表裏面的blog_id號。這就給我獲取每一個站點的數據提供了方便。數據庫

例如:編程

<?php
function wpmu_recent_posts_mu($how_many=10, $how_long=0, $titleOnly=true, $begin_wrap="\n<li>", $end_wrap="</li>")
{
    global $wpdb;
    global $table_prefix; $counter = 0; //首先經過判斷是否顯示時間區間來分別使用不一樣的SQl語句
    if ($how_long > 0)
    {
        $blogs = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs WHERE public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' AND last_updated >= DATE_SUB(CURRENT_DATE(), INTERVAL $how_long DAY) ORDER BY last_updated DESC"); } else { $blogs = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs WHERE public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' ORDER BY last_updated DESC"); }
        
        //若是存在多站點ID
        if ($blogs) { 
            echo "<ul>";
            foreach ($blogs as $blog) { // 下面是須要使用的數據表
                $blogOptionsTable = $wpdb->base_prefix.$blog."_options"; $blogPostsTable = $wpdb->base_prefix.$blog."_posts"; $options = $wpdb->get_results("SELECT option_value FROM $blogOptionsTable WHERE option_name IN ('siteurl','blogname') ORDER BY option_name DESC"); // 爲最新文章獲取標題和ID號
                if ($how_long > 0) 
                 $thispost = $wpdb->get_results("SELECT ID, post_title FROM $blogPostsTable WHERE post_status = 'publish' AND ID > 1 AND post_type = 'post' AND post_date >= DATE_SUB(CURRENT_DATE(), INTERVAL $how_long DAY) ORDER BY id DESC LIMIT 0,1"); } else { $thispost = $wpdb->get_results("SELECT ID, post_title FROM $blogPostsTable WHERE post_status = 'publish' AND ID > 1 AND post_type = 'post' ORDER BY id DESC LIMIT 0,1"); 
                 } // 若是存在將輸入內容
                 if($thispost) 
                 {
                 // 獲取子站點文章連接
                 $thispermalink = get_blog_permalink($blog, $thispost[0]->ID); if ($titleOnly == false) { echo $begin_wrap.'<a href="' .$thispermalink.'">'.$thispost[0]->post_title.'</a> <br/> by <a href="' .$options[0]->option_value.'">' .$options[1]->option_value.'</a>'.$end_wrap; $counter++; } else { echo $begin_wrap.'<a href="'.$thispermalink .'">'.$thispost[0]->post_title.'</a>'.$end_wrap; $counter++; } } // 對文章數量進行判斷。
                 if($counter >= $how_many) { break; } 
        } echo "</ul>"; 
    } 
}

?>

把上面的代碼放到 functions.php 中,使用方法上面已有說明。如你有十個子站點。想顯示這個十個子站點的最新文章,就可使用上面的方法:數組

<?php wpmu_recent_posts_mu(10, 0, true, '<li>', '</li>'); ?>

 

假如你有50個子站點,而你控制顯示的最新文章數量只是10篇,頗有可能十幾個用戶在同時使用子站點發布文章,那這樣的話有些最新文章得不到顯示,因此考慮到隨機顯示子站點的最新文章。且每刷新一次頁面都會隨機顯示不一樣的子站點文章代碼以下:函數

<?php
function lei_multsite_recent_post($showpost) {
    global $wpdb, $post, $table_prefix; //首先將全部的子站點ID號顯示出來
        $most_post = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs WHERE public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' ORDER BY last_updated DESC");
        foreach ($most_post as $key => $v) 
        {
            if($v !=1 ) //除主站點ID
            { $b_id[$key] = $v; } 
        }
        $newid = array_flip($b_id); //php數組函數對換鍵值
        $new_post_id = array_rand($newid,2); //php數組函數隨機顯示2條,這裏的數值不能大於你建立子站點的個數。
        foreach ( $new_post_id as $k => $vol )
        {
            $blogPostsTable = $wpdb->base_prefix.$vol."_posts"; $recent_post = $wpdb->get_results("SELECT * from $blogPostsTable where post_status = 'publish' and post_type = 'post' ORDER BY post_date desc LIMIT 0,$showpost");
            foreach ($recent_post as $ks => $vs)
            {
                $thispermalink = get_blog_permalink($vol, $vs->ID);
                $count1 += 1;
                echo '<li><a href="'.$thispermalink.'">'.$vs->post_title.'</a></li>'; 
            } 
    }
}
?>

 

將上面的方法一樣放到你使用主題的functions.php文件裏面,使用方法只要post

<?php lei_multsite_recent_post(1); ?>

 

二、而不懂編程的朋友們會想到使用插件來完成,雖然有時候能知足咱們的要求,但畢竟使用插件有侷限性,並非每一款插件都適合(插件裏面的代碼也都是用SQL語句來完成)。好比有這麼幾款插件:Multisite Latest Posts Widget(顯示多站點最新文章)Multisite Featured Blog (顯示多站點特點博客)WPMU Recent Posts Widget(顯示多站點最近文章) 網站

相關文章
相關標籤/搜索