腾讯云服务器优惠活动华纳云香港服务器

WordPress发布文章自动同步到新浪微博(带特色图片)

WordPress主题推荐

WordPress 发博客后自动同步到新浪微博,感觉对博客的宣传和提升“逼格”都有显著的作用,今天就跟大家分享一下 WordPress 如何实现发布文章自动同步新浪微博(带特色图片)功能。

第一步:添加代码实现自动同步功能

将以下代码添加到主题目录的 functions.php 最后一个?>前面即可。PS:记得修改新浪账号、密码和appkey

  1. /**
  2. * WordPress 发布文章同步到新浪微博(带图片&自定义栏目版)
  3. * 文章地址:https://zhang.ge/4947.html
  4. */
  5. function post_to_sina_weibo($post_ID) {
  6.    /* 鉴于很多朋友反馈发布文章空白,临时加上调试代码,若无问题可删除此行,若有问题请将错误信息在本文留言即可 */
  7.    ini_set(‘display_errors’, true);
  8.    /* 此处修改为通过文章自定义栏目来判断是否同步 */
  9.    if(get_post_meta($post_ID,’weibo_sync’,true) == 1) return;
  10.    $get_post_info = get_post($post_ID);
  11.    $get_post_centent = get_post($post_ID)->post_content;
  12.    $get_post_title = get_post($post_ID)->post_title;
  13.    if ($get_post_info->post_status == ‘publish’ && $_POST[‘original_post_status’] != ‘publish’) {
  14.        $appkey=’1034947262′; /* 此处是你的新浪微博 appkey,不修改的话就会显示来自张戈博客哦! */
  15.        $username=’微博用户名’;
  16.        $userpassword=’微博密码’;
  17.        $request = new WP_Http;
  18.        $keywords = “”;
  19.        /* 获取文章标签关键词 */
  20.        $tags = wp_get_post_tags($post_ID);
  21.        foreach ($tags as $tag ) {
  22.           $keywords = $keywords.’#’.$tag->name.“#”;
  23.        }
  24.       /* 修改了下风格,并添加文章关键词作为微博话题,提高与其他相关微博的关联率 */
  25.      $string1 = ‘【文章发布】’ . strip_tags$get_post_title ).’:’;
  26.      $string2 = $keywords.’ 查看全文:’.get_permalink($post_ID);
  27.      /* 微博字数控制,避免超标同步失败 */
  28.      $wb_num = (138 – WeiboLength($string1.$string2))*2;
  29.      $status = $string1.mb_strimwidth(strip_tags( apply_filters(‘the_content’, $get_post_centent)),0, $wb_num,‘…’).$string2;
  30.        /* 获取特色图片,如果没设置就抓取文章第一张图片 */
  31.        if (has_post_thumbnail()) {
  32.           $timthumb_src = wp_get_attachment_image_src( get_post_thumbnail_id($post_ID), ‘full’ );
  33.           $url = $timthumb_src[0];
  34.        /* 抓取第一张图片作为特色图片,需要主题函数支持 */
  35.        } else if(function_exists(‘catch_first_image’)) {
  36.           $url = catch_first_image();
  37.        }
  38.        /* 判断是否存在图片,定义不同的接口 */
  39.        if(!empty($url)){
  40.            $api_url = ‘https://api.weibo.com/2/statuses/upload_url_text.json’; /* 新的 API 接口地址 */
  41.            $body = array(‘status’ => $status,’source’ => $appkey,’url’ => $url);
  42.        } else {
  43.            $api_url = ‘https://api.weibo.com/2/statuses/update.json’;
  44.            $body = array(‘status’ => $status,’source’ => $appkey);
  45.        }
  46.        $headers = array(‘Authorization’ => ‘Basic ‘ . base64_encode(“$username:$userpassword”));
  47.        $result = $request->post($api_urlarray(‘body’ => $body,’headers’ => $headers));
  48.        /* 若同步成功,则给新增自定义栏目 weibo_sync,避免以后更新文章重复同步 */
  49.        add_post_meta($post_ID, ‘weibo_sync’, 1, true);
  50.     }
  51. }
  52. add_action(‘publish_post’, ‘post_to_sina_weibo’, 0);
  53. /*
  54. //获取微博字符长度函数 
  55. */
  56. function WeiboLength($str)
  57. {
  58.     $arr = arr_split_zh($str);   //先将字符串分割到数组中
  59.     foreach ($arr as $v){
  60.         $temp = ord($v);        //转换为 ASCII 码
  61.         if ($temp > 0 && $temp < 127) {
  62.             $len = $len+0.5;
  63.         }else{
  64.             $len ++;
  65.         }
  66.     }
  67.     return ceil($len);        //加一取整
  68. }
  69. /*
  70. //拆分字符串函数,只支持 gb2312 编码  
  71. //参考:http://u-czh.iteye.com/blog/1565858
  72. */
  73. function arr_split_zh($tempaddtext){
  74.     $tempaddtext = iconv(“UTF-8”“GBK//IGNORE”$tempaddtext);
  75.     $cind = 0;
  76.     $arr_cont=array();
  77.     for($i=0;$i<strlen($tempaddtext);$i++)
  78.     {
  79.         if(strlen(substr($tempaddtext,$cind,1)) > 0){
  80.             if(ord(substr($tempaddtext,$cind,1)) < 0xA1 ){ //如果为英文则取 1 个字节
  81.                 array_push($arr_cont,substr($tempaddtext,$cind,1));
  82.                 $cind++;
  83.             }else{
  84.                 array_push($arr_cont,substr($tempaddtext,$cind,2));
  85.                 $cind+=2;
  86.             }
  87.         }
  88.     }
  89.     foreach ($arr_cont as &$row)
  90.     {
  91.         $row=iconv(“gb2312”,“UTF-8”,$row);
  92.     }
  93.     return $arr_cont;
  94. }

如果你的主题没有抓取文章第一张图片作为特色图片的功能,请额外添加如下代码:

  1. /* 抓取文章第一张图片作为特色图片(已加上是否已存在判断,可放心添加到 functions.php) */
  2. if(!function_exists(‘catch_first_image’)){
  3.   function catch_first_image() {
  4.     global $post$posts;
  5.     $first_img = ;
  6.     ob_start();
  7.     ob_end_clean();
  8.     $output = preg_match_all(‘/<img.+src=[\’“]([^\'”]+)[\'”].*>/i’, $get_post_centent,$matches);
  9.     $first_img = $matches [1] [0];
  10.     return $first_img;
  11.    }
  12. }

第二步:申请新浪微博高级写入权限

如果,你的网站已经在新浪微博中申请接入了,那么只要点击应用名称:

WordPress发布文章自动同步到新浪微博(带特色图片)-第1张-boke112百科(boke112.com)

然后,在接口管理==>申请权限==>申请微博高级写入权限:

WordPress发布文章自动同步到新浪微博(带特色图片)-第2张-boke112百科(boke112.com)

有求于人,不管有多容易、门槛有多低,我们都要保持诚恳的态度:

WordPress发布文章自动同步到新浪微博(带特色图片)-第3张-boke112百科(boke112.com)

一般情况,一个工作日之内就能通过了:

WordPress发布文章自动同步到新浪微博(带特色图片)-第4张-boke112百科(boke112.com)

通过之后,你在去发布文章,就能看到效果了,不但有特色图片,而且还显示【来自 XX 博客】:

WordPress发布文章自动同步到新浪微博(带特色图片)-第5张-boke112百科(boke112.com)

至此,已经实现 WordPress 发布文章自动同步到新浪微博(带特色图片)的功能。是不是再一次满足了你的逼格需求呢?大家赶紧试试吧。

PS:如果不会实现【来自 XX 博客】这种提升逼格的效果,请参考《超简单装 X 功能实现技巧——分享至新浪微博后,显示来自“XX 网站”》这篇文章进行设置。

PS:如果还没有新浪微博的 appkey,请参考《如何申请新浪微博 AppKey?》这篇文章进行申请。

赞 (0) 打赏
版权声明:本文为转载文章,来源于 张戈博客 ,版权归原作者所有!发布此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请联系我们,确认后马上更正或删除,谢谢!
wu