WP酷 WP酷
  • 主题
  • 教程
  • 插件
  • 官方 QQ 群
  • 建站推荐
  • 联系
  • nicetheme® 奈思主题
  • 注册
    登录
立即登录
  • 请到 [后台->外观->菜单] 中设置菜单
首页 › WordPress 教程 › WordPress 新文章实现同步图文新浪微博

WordPress 新文章实现同步图文新浪微博

PCDotFan8年前

多说中有个较为实用的功能——“同时发布到”,只需要绑定新浪微博、腾讯微博、百度……只需勾选编辑文章页上的选项,一键搞定。如果我们需要在主题中集成此功能呢?方法来自发哥,感谢分享。

WordPress 新文章实现同步图文新浪微博-WP酷

 

 

实现方法:

把下面的代码加到 functions.php 中,注意添加access_token 和默认图片地址两个参数,access_token 的获得方法参考相关文章(比如说 CNBlogs)。

class sync_sina {

    public $access_token = "";//access_token
    
    public $default_image = "";//默认图片地址

    public $host = "https://api.weibo.com/2/";
       
    public static $boundary = '';
       
    function __construct(){
        /**
         ** 事件绑定
         **/
        add_action('publish_post', array($this, 'new_post_photo'));
    }

    function do_mu_post($url, $data) {
        $ch = curl_init ();
        $headers = array("Content-Type:multipart/form-data;boundary=". self::$boundary);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        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;
    }

    function build_http_query_multi($params) {
        if (!$params) return '';
        uksort($params, 'strcmp');
        $pairs = array();
        self::$boundary = $boundary = uniqid('------------------');
        $MPboundary = '--'.$boundary;
        $endMPboundary = $MPboundary. '--';
        $multipartbody = '';
        foreach ($params as $parameter => $value) {
            if( in_array($parameter, array('pic', 'image')) && $value{0} == '@' ) {
                $url = ltrim( $value, '@' );
                $content = file_get_contents( $url );
                $array = explode( '?', basename( $url ) );
                $filename = $array[0];
                $multipartbody .= $MPboundary . "\r\n";
                $multipartbody .= 'Content-Disposition: form-data; name="' . $parameter . '"; filename="' . $filename . '"'. "\r\n";
                $multipartbody .= "Content-Type: image/unknown\r\n\r\n";
                $multipartbody .= $content. "\r\n";
            } else {
                $multipartbody .= $MPboundary . "\r\n";
                $multipartbody .= 'content-disposition: form-data; name="' . $parameter . "\"\r\n\r\n";
                $multipartbody .= $value."\r\n";
            }
        }
        $multipartbody .= $endMPboundary;
        return $multipartbody;
    }

    function get_image($post_id){
        if( has_post_thumbnail($post_id) ){
            $timthumb_src = wp_get_attachment_image_src(get_post_thumbnail_id($post_id),'full');
            $output = $timthumb_src[0];
        } else {
            $content = get_post_field('post_content', $post_id);
            $defaltthubmnail = $this->default_image;
            preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $content, $strResult, PREG_PATTERN_ORDER);
            $n = count($strResult[1]);
            if($n > 0){
                $output = $strResult[1][0];
            } else {
                $output = $defaltthubmnail;
            }
        }
        return $output;
    }

    function new_post_photo($post) {
        global $post;
        if( $post->post_status != "publish" ){
            $token = $this->access_token;
            $url = $this->host ."statuses/upload.json";
            $status = "我刚刚发布了新文章《".get_the_title()."》。".get_permalink();
            $status .= mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0,180,"..."); //顺手加了个文章摘要,不喜欢就去掉啦
            $pic_path = self::get_image($post->ID);
            $params = array();
            $params['access_token'] = $token;
            $params['status'] = $status;
            $params['pic'] = '@'.$pic_path;
            $body = self::build_http_query_multi($params);
            $result = self::do_mu_post($url,$body);

        }
    }
}
$HMT = new sync_sina();

 

 

注意

  • 需要服务器支持file_get_contents;
  • 可能因为服务器等不可抗力原因造成发送失败或者发布文章时间变长;
  • 如果应用未通过审核小尾巴会为未审核应用。

 

#fatesinger#functions.php#timthumb#多说#百度
8
分享

本站下载管理系统「dl.mywpku.com」因年久失修而永久关闭。若需获得往年主题,请至 WP酷的百度网盘(提取码: 5rbm) 自行搜索下载。默认解压密码为「www.mywpku.com」。

对您造成的不便,敬请谅解!

PCDotFan 站长
文章 435评论 859
相关文章
  • [6.0 更新中文汉化]极度流行的SEO插件 – WordPress SEO by Yoast
  • WordPress 新用户注册邮件链接提示「您的密码重设链接无效」
  • AMP – 为 WordPress 移动站点操作全球访问优化
  • 去除谷歌服务 – WordPress 国外主题全方位加速
  • 使用 WP-CLI 简化 WordPress 操作流程
  • WordPress 基础开发 – 一探 WordPress Hook 机制及示例应用
  • 优化静态资源 – WordPress 国外主题全方位加速
  • WordPress 实现微信登录
评论 (12)
再想想
  • 博客集聚地

    是需要curl支持…….

    8年前
    • 滑羊凌兰

      @博客集聚地 [交给我吧] 来瞅瞅啦~

      7年前
    • 电子商务

      @博客集聚地 [交给我吧] 来瞅瞅啦~

      7年前
  • 博客集聚地

    少看了个还要对file_get_contents支持,不过curl不支持也不行

    8年前
  • cy

    为啥这发布文章显示成2.28 吧?

    8年前
  • 北京集体户口挂靠

    这个功能好,

    8年前
  • 月赚上千www.haosheep.com

    博主怎么获取文章第一张图片,发布新浪微博文字图片呢?能回复我一下么?

    7年前
  • 月赚上千www.haosheep.com

    我的新浪同步代码没有你的长啊,我想在我原有的基础上加,但是我只会用 不知其原理

    7年前
  • 月赚上千www.haosheep.com

    可以么?

    7年前
  • 月赚上千www.haosheep.com

    好吧 我也正在看

    7年前
  • 月赚上千www.haosheep.com

    不行 自己加上网站都打不开了….

    7年前
  • 春情网

    一直在用这个,还不错的说。

    7年前
PCDotFan
站长
若无特别注明,则默认我发布的所有文章均为内容原创 / 翻译原创,转载时请保留来源。
435文章
859评论
3K获赞
猜你喜欢
WordPress第一次评论禁止全英文/屏蔽日语垃圾评论
10年前
Landing Sites代码版:增加网站流量
10年前
Enews – 黑色CMS/Blog双模式WordPress主题 v2.3【持续更新】
8年前
  • 杂记
  • WordPress 付费主题推荐
Copyright © 2023 WP酷. Designed by nicetheme. 琼ICP备13002067号-1