关于“乱弹”
很久很久以前,OSChina 网站有个栏目叫 周x乱弹,内容就是用户们的说说的小编精选集。
这个已经下架了(UGC内容水太深),访问收藏夹里的乱弹链接会提示:“该内容暂时无法访问,敬请理解。”
WP可以自己做一个发布少于100字内容的专题页。这里我偷懒选用最简单的实现方式:新建一个普通页面,再修改下评论列表的样式就行了。但是又不想发个内容还要登录wp后台,如果可以通过命令行窗口调用一个命令就发送就 perfect 了。
所以就有了 “零工” 程序啦:https://github.com/daoyuc/zero_tools
其实核心代码就是,读取某篇文章评论内容 和 插入一条评论:
<?php namespace App\Commands; use DB; use LaravelZero\Framework\Commands\Command; class BbCommand extends Command { /** * The signature of the command. * --p Whether the content should be private. * * @var string */ protected $signature = 'bb {content?} {--p} {--e}'; /** * The description of the command. * * @var string */ protected $description = 'Display recent phpf5 bb'; /** * Execute the console command. * * @return mixed */ public function handle() { $content = $this->argument('content'); $p = $this->option('p'); $comment_post_ID = config('bb.post_id'); //定义你的说说页面ID if (!$comment_post_ID) { $this->error('config bb.post_id is null!'); exit; } $comment_author = config('bb.author'); $user_id = config('bb.user_id'); $comment_author_email = config('bb.email'); if (!$content) { //查询评论 $comments = DB::table('wp_comments')->select('comment_content', 'comment_date') ->where('comment_post_ID', $comment_post_ID) ->orderBy('comment_ID', 'DESC') ->limit(config('bb.num')) ->get() ->map(function ($row) { return [ $this->transContent($row->comment_content), $row->comment_date, ]; }); //dd($comments); $headers = ['乱弹', '时间']; $this->table($headers, $comments); //borderless, 'compact' } else { if ($this->option('e')) { //修改上一条 $affected = DB::update( 'UPDATE wp_comments SET comment_content = ? WHERE comment_post_ID = ? AND comment_approved = 1 ORDER BY comment_id DESC LIMIT 1', [$content, $comment_post_ID] ); if ($affected) { $this->info('edit done'); exit; } else { $this->error('edit ooops!'); } } $inSql = 'INSERT INTO wp_comments (comment_post_ID, comment_author, comment_author_email, comment_date, comment_date_gmt, comment_content, comment_agent, `user_id`) VALUES (?,?,?,?,?,?,?,?)'; $newId = DB::insert($inSql, [ $comment_post_ID, $comment_author, $comment_author_email, gmdate('Y-m-d H:i:s', time() + 8 * 3600), date('Y-m-d H:i:s'), $content, 'cmd', $user_id, ]); if ($newId) { $this->info('done'); DB::update( 'UPDATE wp_posts SET comment_count =(SELECT COUNT(*) FROM wp_comments WHERE comment_post_ID = ? AND comment_approved = 1) WHERE ID = ?', [$comment_post_ID, $comment_post_ID] ); } else { $this->error('ooops!'); } } } private function transContent($content) { return str_replace(PHP_EOL, '↙ ', $content); //换行符替换为浮号 ↙ } }
以上代码基于已有框架:Laravel Zero , 参考资料:https://learnku.com/laravel/t/66287
参数说明:
不带参数 (显示最新的 10 条评论) 引号包裹的字符串 (作为评论内容) --q[=关键字] 关键字搜索 --e 编辑模式(修改最后一条评论) --et 最后一条评论附加翻译(此时无需内容参数) --c 计数(返回对应文章一共有多少条评论) --id[=ID] 返回特定 ID 的评论内容,--id=-1 输出最后一条评论内容 --t 内容调用百度翻译, 换行附加在原本内容后面 --f 同步内容到 flomo 笔记
相关配置项:(.env文件)
DB_CONNECTION=mysql DATABASE_URL= BB_POST_ID= BB_AUTHOR= BB_USER_ID= BB_EMAIL= BB_NUM=
效果图:(windows 10 自带CMD)

TODO:
[ ] 修改评论列表样式
[ ] 支持附带图片发送
Categories: 示例