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 函數轉碼。