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 函数转码。