无插件实现WordPress多个站点同步文章更新方法

今天晚上有几个网友在群里讨论如何将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;  
   }  
}

注意修改一些标注的参数,要和网站一致。

这样,我们试试是否有用。后面国外主机优惠准备也试试。