我们有很多站长朋友是有多个站点的,而且这些站点之间的内容均是相似的。比如前几天有看到网友提到他有三个网站,而且他发布一个网站之后,其他的2个网站都是复制内容同步发布的,这样感觉比较麻烦,是否可以实现实时同步发布到2个网站中。这里麦子也没有去找有没有类似插件,估计也是会有的。
但是,这里看到有通过自建API接口,然后同步发布的方法,如果有需要可以试试。
方案一
同步所有分类的文章,所有分类必须名称一样才能同步,否则会全同步到默认分类
第一、接收文章网站配置发布接口(目标站点设置)
<?php //接收文章 define('WP_USE_THEMES', false); require_once("wp-load.php"); $key='设置复杂的字母数字密钥'; //设置启动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 ); } ?>
这里我们需要设置一个 wp-sync-post.php PHP文件放在接收文章的网站站点根目录下。代码里我们需要设置自建的密钥,要复杂一些字符。
第二、发布对接设置(发布站点设置)
这个文件要放到我们写文章的这个站点配置文件中。
//发布网站文章推送 add_action('publish_post', 'fanly_sync_post'); function fanly_sync_post($post_ID) { $key='同上面的密钥一样'; //输入API密钥 $url='http://www.接收文章网站域名.com/wp-sync-post.php';//API地址 $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; } }
这里我们需要在 functions.php 文件中配置,要设置好对接的域名和密钥。
然后我们试试是不是被同步发送到那上面的站点。
方案二
指定分类同步,因为每个网站的分类都不一样的,不可能每个分类都要同步过去,我们只需要同步指定分类就行了。
第一,修改接收网站接口代码。
wp-sync-post.php PHP文件在需要发布的站点根目录下。代码里我们需要设置自建的密钥,要复杂一些字符。
<?php //网站接收文章 define('WP_USE_THEMES', false); require_once("wp-load.php"); $key='设置复杂的字母数字密钥'; //设置启动API的密钥 if($_POST['key']==$key){ $category_map = array( '发布网站分类' => '接收网站分类', '发布网站分类' => '接收网站分类', // 可以根据实际情况增加分类对应关系。前面是发布文章的分类,后面是接收网站的分类。只限制这里设置好的分类同步文章,其他分类不同步。 ); // 获取需要同步的分类 ID 数组 $sync_categorys = array(); foreach ($category_map as $sync_cat_name) { $sync_cat_id = get_cat_ID($sync_cat_name); if ($sync_cat_id) { $sync_categorys[] = $sync_cat_id; } } $categorys=explode(',',$_POST['category']); $category=array(); foreach ($categorys as $cat) { $mapped_cat = isset($category_map[$cat]) ? $category_map[$cat] : $cat; $cat_id = get_cat_ID($mapped_cat); if (in_array($cat_id, $sync_categorys)) { $category[] = $cat_id; } } if (!empty($category)) { // 如果需要同步的分类不为空,则进行同步 $info = array( 'post_title' => $_POST['title'], 'post_content' => $_POST['content'], 'post_status' => 'publish', 'post_author' => 2, //发布文章的作者ID,1 为管理员 'post_date' => $_POST['date'], 'tags_input' => $_POST['tags'], 'post_category' => $category, 'post_type' => $_POST['type'] ); wp_insert_post( $info ); } } ?>
第二,functions.php 文件中配置,要设置好对接的域名和密钥。
//网站发布文章 add_action('publish_post', 'fanly_sync_post'); function fanly_sync_post($post_ID) { $key='同上面的密钥一样'; //输入API密钥 $url='http://www.接收网站域名/wp-sync-post.php';//API地址 $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++) { $mapped_cat = get_cat_name($_POST['post_category'][$x]); $category .= isset($category_map[$mapped_cat]) ? ','.$category_map[$mapped_cat] : ','.$mapped_cat; } $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; } }
以上只能同步到一个网站
如果需要同步到多个网站,需要把发布网站的functions.php里代码换成以下代码
//网站发布文章 add_action('publish_post', 'fanly_sync_post'); function fanly_sync_post($post_ID) { $key='同上面的密钥一样'; //输入API密钥 $urls=array( 'http://http://www.接收网站域名1.com/wp-sync-post.php',//网站1的API地址 'http://http://www.接收网站域名2.com/wp-sync-post.php'//网站2的API地址 ); $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++) { $mapped_cat = get_cat_name($_POST['post_category'][$x]); $category .= isset($category_map[$mapped_cat]) ? ','.$category_map[$mapped_cat] : ','.$mapped_cat; } $type=$_POST['post_type']; $tags=str_replace('、',',',$_POST['tax_input']['post_tag']); if($_POST['newtag']['post_tag']){ $tags.=','.str_replace('、',',',$_POST['newtag']['post_tag']); } foreach($urls as $url){ $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; } }
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END