今天晚上有几个网友在群里讨论如何将WordPress更新的文章同步到他备用的站点中。这个同学的想法比较奇特,他是希望自己备用站点的数据保存同步更新,起到备份作用,国外主机优惠有些不理解,为什么不采用定期数据库备份或者快照备份,居然要这样操作,不懂什么意思。
不管他要做什么,问问有没有这样的办法实现的,这里我找到网上有解决办法,让他试试看。这里有看到这个办法,记录下来,明天问问他是否可行,有空的时候我也找个测试站点试试。
1、同步站点
这里我们在需要同步到的站点目录下方一个发布文件。
//文章接收
define(\'WP_USE_THEMES\', false);
require_once(\"wp-load.php\");
$key=\'itbulu.com\'; //设置启动API的密钥
if($_POST[\'key\']==$key){
$categorys=explode(\',\',$_POST[\'category\']);
$category=array();
for($x=1;$x<count($categorys);$x++) {
$category[$x-1]=get_cat_ID($categorys[$x]);
}
$info = array(
\'post_title\' => $_POST[\'title\'],
\'post_content\' => $_POST[\'content\'],
\'post_status\' => \'publish\',
\'post_author\' => 1, //发布文章的作者ID,1 为管理员
\'post_date\' => $_POST[\'date\'],
\'tags_input\' => $_POST[\'tags\'],
\'post_category\' => $category,
\'post_type\' => $_POST[\'type\']
);
wp_insert_post( $info );
}
我们创建一个publish.php文件。注意要修改密钥,这个是明码,我们需要注意复杂一些,实际上这个文件如果被泄露是很不安全的,以后看看有没有办法做成加密。
2、发布站点
//发布文章推送
add_action(\'publish_post\', \'wp_sync_posts\');
function wp_sync_posts($post_ID) {
$key=\'itbulu.com\'; //和上面密钥一样
$url=\'http://www.域名.com/publish.php\';//我们要同步的网站域名地址和上面PHP文件
$post_info = get_post($post_ID);
if ( $post_info->post_status == \'publish\' && $_POST[\'original_post_status\'] != \'publish\' ) {
$title=$_POST[\'post_title\'];
$content=$_POST[\'content\'];
$date=$_POST[\'aa\'].\'-\'.$_POST[\'mm\'].\'-\'.$_POST[\'jj\'].\' \'.$_POST[\'hh\'].\':\'.$_POST[\'mn\'].\':\'.$_POST[\'ss\'];
$category=\'\';
for($x=1;$x<count($_POST[\'post_category\']);$x++) {
$category.=\',\'.get_cat_name($_POST[\'post_category\'][$x]);
}
$type=$_POST[\'post_type\'];
$tags=str_replace(\'、\',\',\',$_POST[\'tax_input\'][\'post_tag\']);
if($_POST[\'newtag\'][\'post_tag\']){
$tags.=\',\'.str_replace(\'、\',\',\',$_POST[\'newtag\'][\'post_tag\']);
}
$data = \'key=\'.$key.\'&title=\'.$title.\'&content=\'.$content.\'&date=\'.$date.\'&category=\'.$category.\'&type=\'.$type.\'&tags=\'.$tags;
$ch = curl_init (); //cURL模拟POST
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt ( $ch, CURLOPT_POST, TRUE );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$ret = curl_exec ( $ch );
curl_close ( $ch );
return $ret;
}
}
注意修改一些标注的参数,要和网站一致。
这样,我们试试是否有用。后面国外主机优惠准备也试试。