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