并不想每篇文章都同步到全部的微博上,所以修改了下微博通的插件,发文时可以选择性地同步微博
基础代码是 小蝴蝶 开发的 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); }
若要把该功能做成插件,则需要在配置页面提供添加删除帐号的功能,这段时间较忙,以后有空再搞。
@小蝴蝶: 好,几秒前你也在这里。
@郑永: 是啊 好久没坐沙发了哈哈
@Laycher: 试了下,网页打开速度慢了很多很多啊
建议用无觅相关文件插件,可带来流量不说,还能同步到微博上。
@郑永: 我自己的版本里面是没有检查更新的,只根据有没有勾选微博的 checkbox 来判断要不要同步,要同步到哪个微博,这样也算是有了你推荐的这个功能。对于插件来说,比较好的方式我想是在插件配置页面里提供增删微博账号的功能,这样就比较完美了
@小蝴蝶: 哈哈, 全站沙发,这下乐透了。
因为同步的稳定性不够,我换别的用了,我还是推荐加一个选项,可以选择修改更新文章时是否同步。
板凳
@小蝴蝶: 你是我这个站全站的沙发啊~~
不错不错 若要在配置页面添加这个功能的开关 可以写一个选项 然后在文章页调用的地方加上类似if get_option的判断