让微博通 WordPress 插件支持选择同步

并不想每篇文章都同步到全部的微博上,所以修改了下微博通的插件,发文时可以选择性地同步微博

基础代码是 小蝴蝶 开发的 1.2 版本 (下载),支持截取摘要和图片。

我的修改主要就是在编辑文章页面添加选项框,选择要同步的微博帐号。

postweibo

首先在微博通绑定帐号后,每个帐号都会有个ID ,我们需要获得它。
这个 ID 微博通上好像并没有提供查看的地方,一开始我搞错了,试了各种 ID 都不对,最后在它的”发微博页面”,通过看 html 代码才算找到。

一般浏览器都有提供查看页面源代码的功能,打开后搜索你的微博名字,找到对应的 checkbox 元素,记下 ID。
有 chrome 的话,在下图中微博帐号名字的地方,右键菜单 -> 审查元素,可以找到该绑定帐号的 ID。

postweibo-2

postweibo-3

然后在 wbto.php 中添加如下代码

add_action( 'add_meta_boxes', 'add_weibo_box' );

// 为文章和页面编辑界面添加一个选项框
function add_weibo_box() {
    add_meta_box( 'ghost_post_weibo', 'Post Weibo', 'inner_add_weibo_box', 'post', 'side', 'high' );
    add_meta_box( 'ghost_post_weibo', 'Post Weibo', 'inner_add_weibo_box', 'page', 'side', 'high' );    
}

// 添加checkbox, value 的值就是微博通中找到的 ID
// 我这里填了三项,你可以根据自己的需要修改
function inner_add_weibo_box( $post ) {
    echo '<div> <input type="checkbox" id="weibo_pyzhangxiang" name="weibo_pyzhangxiang" value="1551234" />&nbsp;@py张翔</div>';

    echo '<div> <input type="checkbox" id="weibo_piecerepeat" name="weibo_piecerepeat" value="1552234" />&nbsp;@pp复读机-学外语</div>';

    echo '<div> <input type="checkbox" id="qq_123465808" name="qq_123465808" value="1553234" />&nbsp;@123465808</div>';
}

在 send_to_wbto 函数中添加下面代码中注释的部分

function send_to_wbto($post_ID) {

    // 获取要同步的目标微博,如果没有则不同步,和 inner_add_weibo_box 函数中设置的项目对应
    $weibo_zx = isset( $_POST['weibo_pyzhangxiang'] ) ? $_POST['weibo_pyzhangxiang'] : false; 
    $weibo_pp = isset( $_POST['weibo_piecerepeat'] ) ? $_POST['weibo_piecerepeat'] : false; 
    $weibo_qq = isset( $_POST['qq_123465808'] ) ? $_POST['qq_123465808'] : false;

    $aid = '';
    if($weibo_zx)
    {
        $aid = $weibo_zx;
    }
    if($weibo_pp)
    {
        if($aid == '')
            $aid = $weibo_pp;
        else
            $aid .= ',' . $weibo_pp;
    }
    if($weibo_qq)
    {
        if($aid == '')
            $aid = $weibo_qq;
        else
            $aid .= ',' . $weibo_qq;
    }
    if($aid == '')
        return ;
    ////////////////////////////////////////////////////////

    $posted = get_post($post_ID);
    preg_match_all('/<img[^>]+src=[\'"](http[^\'"]+)[\'"].*>/isU',$posted->post_content, $image);
    $p_sum = count($image[1]);
    if ($p_sum > 0) {
        $p = $image[1][0];
    }
    if (!$p) {
        if (function_exists('has_post_thumbnail') && has_post_thumbnail($post_ID)) { 
        if ($image_url = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'post-thumbnail'))
            $p = $image_url[0];
        }
    }
    $t1=$posted->post_date;
    $t2=$posted->post_modified;
    $diff=strtotime($t2)-strtotime($t1);
    if($diff>0){return;} 
    $username = get_option('wbto_username');
    $password = get_option('wbto_password');
    $posted = get_post($post_ID);
    $image_url = $p;
    $excerpt=mb_strimwidth(strip_tags($posted->post_content),0,130,'...'); 
    $fields = array();
    $fields['source'] = 'wordpress';
    $fields['content'] = urlencode('['.$posted->post_title.']'.mb_strimwidth(strip_tags($excerpt),0,130,'...').' '.$posted->guid); 

    // 设置 aid 参数,根据微博通的 API,该参数就是用于选择发布微博的帐号,以逗号隔开,不填的话默认为 0,即全部发布
    $fields['aid'] = $aid;
    //////////////////////////////////////////

    $ch = curl_init();
    if ($image_url) { 
        $fields['imgurl'] =$image_url;
        curl_setopt($ch, CURLOPT_URL, "http://wbto.cn/api/upload.json"); 
    } else {
        curl_setopt($ch, CURLOPT_URL, "http://wbto.cn/api/update.json"); 
    }
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($ch, CURLOPT_FAILONERROR, TRUE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    $result = curl_exec($ch);
    curl_close($ch);
}

若要把该功能做成插件,则需要在配置页面提供添加删除帐号的功能,这段时间较忙,以后有空再搞。



发表评论?

10 条评论。

  1. @小蝴蝶: 好,几秒前你也在这里。

    回复回复
  2. @郑永: 是啊 好久没坐沙发了哈哈

    回复回复
  3. @Laycher: 试了下,网页打开速度慢了很多很多啊

    回复回复
  4. 建议用无觅相关文件插件,可带来流量不说,还能同步到微博上。

    回复回复
  5. @郑永: 我自己的版本里面是没有检查更新的,只根据有没有勾选微博的 checkbox 来判断要不要同步,要同步到哪个微博,这样也算是有了你推荐的这个功能。对于插件来说,比较好的方式我想是在插件配置页面里提供增删微博账号的功能,这样就比较完美了

    回复回复
  6. @小蝴蝶: 哈哈, 全站沙发,这下乐透了。

    回复回复
  7. 因为同步的稳定性不够,我换别的用了,我还是推荐加一个选项,可以选择修改更新文章时是否同步。

    回复回复
  8. 板凳

    回复回复
  9. @小蝴蝶: 你是我这个站全站的沙发啊~~

    回复回复
  10. 不错不错 若要在配置页面添加这个功能的开关 可以写一个选项 然后在文章页调用的地方加上类似if get_option的判断

    回复回复

发表评论