php 让微博通 WordPress 插件支持选择同步
本文转自我的博客 http://www.shannap.com/wbto-wordpress-plugin-id-select.html
并不想每篇文章都同步到全部的微博上,所以修改了下微博通的插件,发文时可以选择性地同步微博
基础代码是 小蝴蝶 开发的 1.2 版本 (下载),支持截取摘要和图片。 我的修改主要就是在编辑文章页面添加选项框,选择要同步的微博帐号。

首先在微博通绑定帐号后,每个帐号都会有个ID ,我们需要获得它。 这个 ID 微博通上好像并没有提供查看的地方,一开始我搞错了,试了各种 ID 都不对,最后在它的"发微博页面",通过看 html 代码才算找到。
一般浏览器都有提供查看页面源代码的功能,打开后搜索你的微博名字,找到对应的 checkbox 元素,记下 ID。 有 chrome 的话,在下图中微博帐号名字的地方,右键菜单 -> 审查元素,可以找到该绑定帐号的 ID。


然后在 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" /> @py张翔</div>';
echo '<div> <input type="checkbox" id="weibo_piecerepeat" name="weibo_piecerepeat" value="1552234" /> @pp复读机-学外语</div>';
echo '<div> <input type="checkbox" id="qq_123465808" name="qq_123465808" value="1553234" /> @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);
}
若要把该功能做成插件,则需要在配置页面提供添加删除帐号的功能,这段时间较忙,以后有空再搞。
- 上一篇:PHP农历公历转换
- 下一篇:nginx 上部署 wordpress






