关于通过Mysql语句发布文章选择Category问题
通过wp-admin后台或者Windows Live Write发布文章仍然麻烦,于是自己使用PHP程序直接将文章插入到网站数据库中,这样的话数据写入速度要快N倍,适合大量文章发布或多站同时维护。但WP程序的数据库文章表wp-posts和Category关系表是分开的,有没有这样做过的,怎么在插入文章的同时,选择所属的分类。在wp_term_relationships表插入之前文章的ID(mysql_insert_id)以及类别ID
本帖最后由 Seanhere 于 2013-12-3 15:50 编辑
mattfox 发表于 2013-12-3 15:42 static/image/common/back.gif
在wp_term_relationships表插入之前文章的ID(mysql_insert_id)以及类别ID
是的,要先读取已发布文章的ID,并且还要知道该ID代表文章所属category,才能作此操作,量大之后挺麻烦的
先读取id,然后同时写2条sql分别插入2个表,这个不难吧
你可以把写好的代码放上来,我帮你改
共享一下吧,最近好像也有这个需要.
同求一个啊,这个是主要功能速度会提高很多
本帖最后由 Seanhere 于 2013-12-3 21:52 编辑
这个方法是用来更新用来做外链的站群的,站群定期更新。由于站群量越来越大,更新一遍很费时间,但又不愿买市场上的站群软件。所以才想出了这种方法。
自己虽有一些编程基础,但没学过php,是边查语法边写的,程序可能有些笨拙,高手不要见笑。<?php
//数据库参数
$dbuser='';
$dbpwd='';
$dbname='';
$dbhost=';
$dbtable='';
//设置读取路径
$rdcontent='xxxx.txt';
$rdtitle='xxxxtitle.txt';
$rdlink='xxxxlink.txt';
//读取插入链接,并设置发布概率
function gen_link($rdlink){
$data2 = file($rdlink);
$num2 = count($data2);
$id2= mt_rand(0,$num2-1);
$random= mt_rand(0,10);
if($random<5)
$link= trim($data2[$id2]);
else
$link="";
return $link;
}
//生成文章
$str = "";
$title = "";
$data2 = file($rdtitle);
$num2 = count($data2);
$id2 = mt_rand(0,$num2-1);
$title = $data2[$id2];
$data = file($rdcontent);
$num = count($data);
for($i=0;$i<25;$i++){
$temp=" ";
if(($i%5)==0)
$temp="
\n";
elseif(($i==7)|($i==21)){
$links=gen_link($rdlink);
$str=$str." ".$links." ";
}
$id = mt_rand(0, $num-1);
$line = trim($data[$id]);
$str=$str.$temp.$line;
}
//生成slug
function generate_slug($len){
$chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$slug="";
for($j=0;$j<$len;$j++){
$slug .= $chars[ mt_rand(0, strlen($chars) - 1) ];
}
return $slug;
}
$slug = generate_slug(17);
//获取发布时间
$datetime= date("Y-m-d H:i:s");
$sql= "INSERT INTO `$dbtable` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES (NULL, '1', '$datetime', '$datetime','$str','$title', '', 'publish', 'open', 'open', '', '$slug', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0', '', '0', 'post', '', '0')";
//连接数据库并处理数据
$con = mysql_connect($dbhost,$dbuser,$dbpwd);
if(!$con){
die('Failed to connect to database! '.mysql_error());
}else
echo "Suscess to connect to database!
\n";
mysql_select_db($dbname,$con);
$result=mysql_query($sql);
mysql_close($con);
if(!$result){
echo $result;
die('Failed to post article! '.mysql_error());
}else
echo "Suscess to post article!\n";
echo $dbname." is done";
?>文章插入到wp-posts表中,文章id自动生成,在插入时是未知的,所以就在插入文章的同时无法再将id 插入到wp_term_relationship , 这样的结果是发布的文章是无分类的。所以不太明白关于“读取id”的方法,请指教。
文章的slug我用了随机生成的方法,其实最好的方法应该是用文章标题来转化,但那样麻烦些懒得费事。文章作者默认为1,就是管理员。文章内容我用了Yoo版的方法:http://www.advertcn.com/thread-12629-1-1.html。能保证原创性,但损失了可读性,由于是做外链用的,应该关系不大。
如果想将文件夹下的文章随机发布的话,可以先将文件夹内文件遍历,然后随机抽取发布的方法。
这样做成php页面,某站目录下,使用VPS的Crontab 用curl语法定时向该url发出请求,就可自动发布一篇文章,如果想要多篇的话,可以使用循环。
<?php
//数据库参数
$$dbuser='';
$$dbpwd='';
$$dbname='';
$$dbhost='';
$$dbtable='';
//设置读取路径
$$rdcontent='xxxx.txt';
$$rdtitle='xxxxtitle.txt';
$$rdlink='xxxxlink.txt';
//读取插入链接,并设置发布概率
function gen_link($$rdlink){
$$data2 = file($$rdlink);
$$num2 = count($$data2);
$$id2= mt_rand(0,$$num2-1);
$$random= mt_rand(0,10);
if($$random<5)
$$link= trim($$data2[$$id2]);
else
$$link="";
return $$link;
}
//生成文章
$$str = "";
$$title = "";
$$data2 = file($$rdtitle);
$$num2 = count($$data2);
$$id2 = mt_rand(0,$$num2-1);
$$title = $$data2[$$id2];
$$data = file($$rdcontent);
$$num = count($$data);
for($$i=0;$$i<25;$$i++){
$$temp=" ";
if(($$i%5)==0)
$$temp="
\n";
elseif(($$i==7)|($$i==21)){
$$links=gen_link($$rdlink);
$$str=$$str." ".$$links." ";
}
$$id = mt_rand(0, $$num-1);
$$line = trim($$data[$$id]);
$$str=$$str.$$temp.$$line;
}
//生成slug
function generate_slug($$len){
$$chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$$slug="";
for($$j=0;$$j<$$len;$$j++){
$$slug .= $$chars[ mt_rand(0, strlen($$chars) - 1) ];
}
return $$slug;
}
$$slug = generate_slug(17);
//获取发布时间
$$datetime= date("Y-m-d H:i:s");
$$sql= "INSERT INTO `$$dbtable` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES (NULL, '1', '$$datetime', '$$datetime','$$str','$$title', '', 'publish', 'open', 'open', '', '$$slug', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0', '', '0', 'post', '', '0')";
//连接数据库并处理数据
$$con = mysql_connect($$dbhost,$$dbuser,$$dbpwd);
if(!$$con){
die('Failed to connect to database! '.mysql_error());
}else
echo "Suscess to connect to database!
\n";
mysql_select_db($$dbname,$$con);
$$result=mysql_query($$sql);
//前面已经插入,获取插入id
$$insert_id = mysql_insert_id();
//继续插入wp_term_relationship表
if($$insert_id > 0 ){
$$sql= "INSERT INTO `$$dbtable` (`object_id`, `term_taxonomy_id`, `term_order`) VALUES (NULL, '$$insert_id', NULL)";
$$result=mysql_query($$sql);
}
//关闭数据库连接
mysql_close($$con);
if(!$$result){
echo $$result;
die('Failed to post article! '.mysql_error());
}else
echo "Suscess to post article!\n";
echo $$dbname." is done";
?>
代码给你改了下,wp_term_relationship表插入的值,你应该还需要改一下,因为我已经忘了这几个表的关系了,剩下你的分享很好,我们一般使用付费cronjob,因为这种东西稳定性很重要,可以搜索setcronjob
如果你需要第1次插入的某些值,你需要在if($insert_id > 0 )下面再增加一个select的查询
前面既然都是插入的内容,那么插入的内容事先就已经知道的,所以没有必要做这个select查询
我之前是使用wp内容函数搞定的,效率比直接插sql慢些,但胜在稳定,基本不出问题
你可以分两步来处理,先插入文章,再导出文章ID,更新目录.
你可以查看mysql那几个常用的指令。
月光飞燕 发表于 2013-12-3 22:37 static/image/common/back.gif
代码给你改了下,wp_term_relationship表插入的值,你应该还需要改一下,因为我已经忘了这几个表的关系了, ...
多谢,知道怎么做了。
风吹不动 发表于 2013-12-4 08:41 static/image/common/back.gif
我之前是使用wp内容函数搞定的,效率比直接插sql慢些,但胜在稳定,基本不出问题
...
有空细要了解一下wp内容函数,多谢。
yiyunet 发表于 2013-12-4 09:32 static/image/common/back.gif
你可以分两步来处理,先插入文章,再导出文章ID,更新目录.
你可以查看mysql那几个常用的指令。
嗯,回头再学习一下。
本帖最后由 ralf07 于 2013-12-5 12:41 编辑
用WORDPRESS的XMLRPC啊,这个好方便
category,tag都可以插进去的
自来大家都是程序员啊;我想学PHP,不知道有哪些好的入门教程?
sorry, 笔误,看来。
页:
[1]