WordPress后台回复评论时调用可视化编辑器

需求:Wordpress后台回复评论时调用可视化编辑器,这个需求比较少见,不过小俞刚好研究了一下,勉强实现这个功能,有需要的朋友,赶紧折腾。

敬告:

1. 此功能需修改wp源码,玩坏不负责哈。

2. 小俞仅在wp4.9.2版本测试。

研究过程

过程如下,供参考:

1. 寻找相关代码

后台回复评论的url是 /wp-admin/edit-comments.php,所以就打开/wp-admin/edit-comments.php这个文件看了一下,评论回复的输入框的输出函数是wp_comment_reply(‘-1’, true, ‘detail’) 。

2. 搜索函数

搜索了一下发现wp_comment_reply函数在/wp-admin/includes/template.php文件中,原来wp_comment_reply函数里面使用了wp_editor函数输出编辑器,相关代码如下:

  1. <?php
  2. $quicktags_settings = array( ‘buttons’ => ‘strong,em,link,block,del,ins,img,ul,ol,li,code,close’ );
  3. wp_editor( , ‘replycontent’, array( ‘media_buttons’ => false, ‘tinymce’ =>false, ‘quicktags’ => $quicktags_settings ) );
  4. ?>

也就是说,默认的那个评论回复框是一个仅支持文本模式的TinyMCE编辑器,于是我尝试将’tinymce’ =>false改成’tinymce’ =>true,然后测试,结果是:可视化编辑器能正确显示,但是无法输入。原因,可视化编辑器实际上加载了一个iframe,而在点击回复按钮时,用js修改HTML结构的时候,出现问题,所以解决办法就只能是在每次点击”回复”按钮时,重新初始化可视化编辑器。

3. 修改template.php

既然要使用js重新初始化编辑器,那template.php文件中wp_comment_reply输出的编辑器就不要了,注释掉后直接添加一个文本输入框,所以修改如下:

  1. <?php
  2. //$quicktags_settings = array( ‘buttons’ => ‘strong,em,link,block,del,ins,img,ul,ol,li,code,close’ );
  3. //wp_editor( ”, ‘replycontent’, array( ‘media_buttons’ => false, ‘tinymce’ => false, ‘quicktags’ => $quicktags_settings ) );
  4. ?>
  5. <textarea class=“wp-editor-area” rows=“20” autocomplete=“off” cols=“40” name=“replycontent” id=“replycontent” aria-hidden=“true”></textarea>

4. 加载编辑器所需的js

使用WordPress的JS API来加载编辑器,那先要加载好对应的js文件,所以,先加载好编辑器所需要的一些js,在主题的functions.php文件中加上以下代码

  1. function ashuwp_admin_enqueue_scripts(){
  2.   wp_enqueue_editor();
  3. }
  4. add_action(‘admin_enqueue_scripts’, ‘ashuwp_admin_enqueue_scripts’);

直接加上wp_enqueue_editor函数了,没有去研究wp是否默认加载了相关js。

5. 修改js文件
后台评论回复的相关js代码所在文件为/wp-admin/js/edit-comments.js /wp-admin/js/edit-comments.min.js 因为min压缩文件不好修改,所以我们修改edit-comments.js文件后,重新压缩成edit-comments.min.js文件。

敬告:

1. 下面所提到的js修改都是修改edit-comments.js

2. 对js不是很擅长若有更好的修改,请多指教。

5.1 第一处修改:文件中定义了一个静态类commentReply,修改其中的init方法,修改完如下:修改的地方都做了注释。

  1. init : function() {
  2.     var row = $(‘#replyrow’);
  3.    //添加:下面一行先报错好初始的回复评论框的html代码
  4.    var replycontainer = $(‘#replycontainer’).html();
  5.     $(‘a.cancel’, row).click(function() {
  6.      //添加:点击取消的时候,移除编辑器,且将回复评论框恢复到初始状态
  7.      ashuwp_editor = window.tinymce.get( ‘replycontent’ );
  8.      if(ashuwp_editor){
  9.        ashuwp_editor.remove();
  10.        $(‘#replycontainer’).html(replycontainer);
  11.      }
  12.      //添加结束
  13.      return commentReply.revert();
  14.    });
  15.     $(‘a.save’, row).click(function() {
  16.      //修改:点击提交的时候,保存内容,移除编辑器,且将回复评论框恢复到初始状态
  17.      //原代码就是一行:return commentReply.send();
  18.      ashuwp_editor = window.tinymce.get( ‘replycontent’ );
  19.      if(ashuwp_editor){
  20.        ashuwp_editor.save();
  21.        ashuwp_editor.remove();
  22.      }
  23.      commentReply.send();
  24.      $(‘#replycontainer’).html(replycontainer);
  25.      return;
  26.      //修改结束
  27.    });
  28.     $( ‘input#author-name, input#author-email, input#author-url’, row ).keypress( function( e ) {
  29.         if ( e.which == 13 ) {
  30.             commentReply.send();
  31.             e.preventDefault();
  32.             return false;
  33.         }
  34.     });
  35.     // add events
  36.     $(‘#the-comment-list .column-comment > p’).dblclick(function(){
  37.         commentReply.toggle($(this).parent());
  38.     });
  39.     $(‘#doaction, #doaction2, #post-query-submit’).click(function(){
  40.         if ( $(‘#the-comment-list #replyrow’).length > 0 )
  41.             commentReply.close();
  42.     });
  43.     this.comments_listing = $(‘#comments-form > input[name=“comment_status”]’).val() || ;
  44.     /* $(listTable).bind(‘beforeChangePage’, function(){
  45.         commentReply.close();
  46.     }); */
  47. },

5.2 第二处修改:文件中给“回复”这个连接绑定了点击动作,$( ‘#the-comment-list’ ).on( ‘click’, ‘.comment-inline’, function (e) { ….此处n行代码.. });修改如下:

  1. $( ‘#the-comment-list’ ).on( ‘click’, ‘.comment-inline’, function (e) {
  2.         e.preventDefault();
  3.         var $el = $( this ),
  4.             action = ‘replyto’;
  5.         if ( ‘undefined’ !== typeof $el.data( ‘action’ ) ) {
  6.             action = $el.data( ‘action’ );
  7.         }
  8.         commentReply.open( $el.data( ‘commentId’ ), $el.data( ‘postId’ ), action );
  9.     //添加:点击回复的初始化一个编辑器
  10.     wp.editor.initialize(‘replycontent’,{tinymce: {wpautop: true},quicktags: true});
  11.     //添加结束
  12.     } );

6. 重新压缩min.js文件

百度搜索“js压缩”,随便找一个压缩工具,将edit-comments.js文件的代码压缩一份,替换edit-comments.min.js即可。

懒人专用

本教程没有懒人专用代码,请按照第2、3、4、5、6步骤修改即可。

给TA打赏
共{{data.count}}人
人已打赏
WP实用教程

后台文章列表显示浏览次数

2017-9-25 14:19:19

WP实用教程

wordpress登录才能查看网站内容

2017-10-25 14:14:19


版权免责声明

本资源仅用于个人学习测试使用,禁止用于任何商业环境,请于下载后24小时内 删除本资源!

本文所有相关技术/资源内容统一放在下载包里

  1. 1、本网站名称:指点聚源码
  2. 2、本站永久网址:https://www.zhidianju.com
  3. 3、站内所有资源均可通过日常签到等任务进行免费兑换,记得每日来本站签到哦~!(由于模板不是很完善签到 需刷新一下!)。
  4. 4、如果您觉得本站有帮助到您,也想给本站一些帮助。您可以再下方打赏本站。
  5. 5、如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
  6. 6、本站资源来源于互联网收集/个人购买,如有侵犯到您的权益,请查看【版权声明】
  7. 7、本站提供的所有资源均来自互联网搜索,站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁 止用于任何商业环境,任何人不得擅作它用,否则后果自负!请在下载24小时内删除!为尊重作者版权,请购买原版作品,支 持你喜欢的作者,谢谢!
  8. 8、本站资源大多存储在云盘,如发现链接失效 【链接失效】 我们会第一时间更新。本站提供的源码、模板、软件工具等其他资源, 都不包含技术服务 请大家谅解!
  9. 9、如遇到加密压缩包,默认解压密码为"www.zhidianju.com",如遇到无法解压的请联系管理员!
  10. 10、本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索