WordPress 實現呼叫 Discuz 論壇文章。 WordPress 對於廣大博主來說應該都很瞭解了。

WordPress 是世界上使用最多的搭建部落格的開源程式,很多個人獨立部落格都是用 WordPress 的。

有時候自己弄了一個部落格,又折騰了一個 Discuz 論壇,就想把 Discuz 論壇的文章能在 wordpress 上展示出來。這樣呼叫論壇裡面的帖子可以達到全站更新的目的。

雖然 Discuz 提供了 JS 呼叫方案,但是大家都知道,JS 呼叫是非常不符合 SEO 最佳化的,呼叫過來的東西搜尋引擎抓取不到,對你的 wordpress 網站是沒有任何用處的。

雖然 WordPress 呼叫 Discuz 的方法多種多樣,但是這裡提供的方法是最好也是最有效的方法,我們把它稱為 WordPress 呼叫 Discuz 的終極方法。程式碼如下:

<ul>
<?php
//擷取 utf8 字串
function utf8Substring($str, $from, $len){
return preg_replace('#^(?:
[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'. '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s','$1',$str); } //建立資料庫連結 $conn = @mysql_connect("localhost", "資料庫使用者名稱", "資料庫密碼") or die("資料庫連結錯誤"); //指定要連結的資料庫 mysql_select_db("資料庫", $conn); //使用 UTF-8 中文編碼; mysql_query("set names 'UTF-8'"); //指定版塊的所有文章中取 10 條最新帖子 $SQL="SELECT tid,subject FROM 表名 where fid in (版塊 1, 版塊 2……) ORDER BY tid DESC LIMIT 0,10"; $query=mysql_query($SQL); //迴圈顯示結果 while($row=mysql_fetch_array($query)){ echo "<li><span><a title=".$row[subject]." href=https://www.weixiaoduo.com/seo/seo-".$row[tid]."-1-1.html target=_blank>". utf8Substring($row[subject], 0, 40)."</a></span></li>"; } //關閉連結 mysql_close($conn); ?> </ul> 如果呼叫的時候出現了錯誤試著把上面程式碼的如下部分刪除:
//關閉連結
mysql_close($conn);

注:我自己利用這段程式碼,發現呼叫出來的中文文章亂碼,後來把 mysql_query("set names 'UTF-8'"); 改成 mysql_query("set names 'UTF8'"); 解決問題。

附錄的另外一段程式碼

<ul>
<?php
//擷取 utf8 字串
function utf8Substring($str, $from, $len){
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s','$1',$str);
}
//建立資料庫連結
$conn = @mysql_connect("localhost", "資料庫使用者名稱", "資料庫密碼") or die("資料庫連結錯誤");
//指定要連結的資料庫
mysql_select_db("資料庫", $conn);
//使用 UTF-8 中文編碼;
mysql_query("set names 'UTF-8'");
//指定版塊的所有文章中取 10 條最新帖子
$SQL="SELECT tid,subject FROM 表名 where fid in (2,37,38,39,40,41,42,43,44,45) ORDER BY tid DESC LIMIT 0,10";
$query=mysql_query($SQL);
//迴圈顯示結果
while($row=mysql_fetch_array($query)){
echo "<li><span><a title=".$row[subject]."href=https://www.weixiaoduo.com/thread-".$row[tid]."-1-1.html target=_blank>".
utf8Substring($row[subject], 0, 40)."</a></span></li>";
}
//關閉連結
mysql_close($conn);
?>
</ul>

wordpress 呼叫 phpwind 或 discuz 論壇指定版塊帖子

動手前,需要確認兩項:1.wordpress 和 phpwind 是否公用一個資料庫;2. 使用的字元集編碼是否一致。這裡我的情況是,wordpress 和 phpwind 各用一個資料庫,用的都是 UTF-8 字元集。如果看這篇文章的你和我情況不一樣,請酌情修改。

$connbbs = mysql_connect("localhost", "資料庫使用者", "資料庫密碼")
or die("資料庫連結錯誤");
mysql_select_db("資料庫名", $connbbs);
mysql_query("set names 'UTF8'");
$sql = 'SELECT `tid`, `subject` FROM `pw_threads` WHERE `fid` in (1,2) ORDER BY tid DESC LIMIT 0,10';
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
echo "<li><a href=http://論壇地址/read.php?tid=".$row[tid]." target=_blank>".$row[subject]." </a></li>";}
mysql_close($connbbs);

我這裡是調取的論壇版塊 ID=1 和 2 的最新貼 10 篇,phpwind 資料庫表使用的預設字首 pw_,使用時候根據自己需要修改相關引數。

如果 wordpress 和 phpwind 在同一資料庫內,那就更方便了,可直接使用 wordpress 自帶的 wpdb 運算元據庫。


$bbsposts = $wpdb->get_results('SELECT `tid`, `subject` FROM `pw_threads` WHERE `fid` in (1,2) ORDER BY tid DESC LIMIT 0,10');
foreach($bbsposts as $bbspost) {
echo('<li><a href=http://論壇地址/read.php?tid=' . $bbspost->tid . ' target=_blank>' . $bbspost->subject . '</a></li>');

以上就是 phpwind 指定版塊的最新貼呼叫方法,接下來說一下 discuz 的呼叫,非常簡單,改一下那句 SQL 。
'SELECT `tid`, `subject` FROM `pw_threads` WHERE `fid` in (1,2) ORDER BY
tid DESC LIMIT 0,10'
修改成

'SELECT `tid`, `subject` FROM `cdb_threads` WHERE `fid` in (1,2) ORDER BY
tid DESC LIMIT 0,10'

同時把 「http://論壇地址/read.php?tid」 修改為 「http://論壇地址/viewthread.php?tid」 。至此大功告成!

字元集編碼不一致,可以用使用 iconv 函式轉碼。