将字符计数器添加到摘录的Metabox

时间:2016-11-23 作者:marikamitsos

我们尝试应用altered version 属于this (非常流行)自定义函数插件中的代码。stackoverflow甚至提到了这个问题,但由于用户的提问被删除,整个问题都被删除了。这是一个Google cached version. 紧密地modified code 仍然存在。

这是修改后的代码:

// Add Character Counter to the Excerpt Meta Box
function excerpt_count_js(){
  if (\'page\' != get_post_type()) {

      echo \'<script>jQuery(document).ready(function(){
jQuery("#postexcerpt .handlediv").after("<div style=\\"position:absolute;top:5px;right:80px;color:#666;\\"><small>Excerpt length: </small><input type=\\"text\\" value=\\"0\\" maxlength=\\"3\\" size=\\"3\\" id=\\"excerpt_counter\\" readonly=\\"\\" style=\\"background:#fff;\\"> <small>character(s). (128 Characters MAX)</small></div>");
     jQuery("#excerpt_counter").val(jQuery("#excerpt").val().length);
     jQuery("#excerpt").keyup( function() {
     jQuery("#excerpt_counter").val(jQuery("#excerpt").val().length);
     if ( jQuery("#excerpt_counter").val() >= 129 ) {
        jQuery("#excerpt_counter").css("color","red");
     } else {
        jQuery("#excerpt_counter").css("color","green");
     }
   });
});</script>\';
}
}
add_action( \'admin_head-post.php\', \'excerpt_count_js\');
add_action( \'admin_head-post-new.php\', \'excerpt_count_js\');
它在摘录元框上运行良好,产生了预期的结果。

But it causes multiple issues on the Edit Media screen. 虽然编码为仅加载if (\'page\' != get_post_type()) 和上admin_head-post.phpadmin_head-post-new.php.
这些问题是:

HelpScreen Options 按钮变得不可点击

  • Hover Effect 在管理侧栏上不起作用Description buttons (比如b、i、img等)就消失了
  • 我们尝试了原版以及其他修改版本的脚本,但没有成功。

    也提出了类似的问题herehere 似乎使用相同的jQuery编码。不过,没有人报告任何问题。只是我们吗?

    编辑:

    由于您提出了问题,错误如下:

    Uncaught TypeError: Cannot read property \'length\' of undefined
    Uncaught TypeError: Cannot read property \'hasClass\' of undefined

    1 个回复
    最合适的回答,由SO网友:socki03 整理而成

    好的,所以我不喜欢它的编写方式,所以我用不同的语法和更可读的结构稍微重写了它。

    <?php 
    // Add Character Counter to the Excerpt Meta Box
    function excerpt_count_js(){
        if (\'page\' != get_post_type()) { ?>
            <script>
    
            (function($){
    
                $(document).ready(function(){
    
                    if ( $(\'#postexcerpt\').length ) {
    
                        var maxChar = 128;
    
                        $excerpt = $(\'#excerpt\');
    
                        $("#postexcerpt .handlediv").after( \'<div style="position:absolute;top:5px;right:80px;color:#666;">\' +
                                                                \'<small>Excerpt length: </small>\' +
                                                                \'<input type="text" value="0" maxlength="3" size="3" id="excerpt_counter" readonly="" style="background:#fff;" /> \' +
                                                                \'<small>character(s). (\' + maxChar + \' Characters MAX)</small>\' +
                                                            \'</div>\'
                                                        );
    
                        $excerptCounter = $("#excerpt_counter");
    
                        $excerptCounter.val( $excerpt.val().length );
    
                        $excerpt.keyup( function() {
    
                            $excerptCounter.val( $excerpt.val().length );
    
                            var exColor = ( ( $excerptCounter.val() > maxChar ) ? \'red\' : \'green\' );
    
                            $excerptCounter.css( \'color\', exColor );
    
                        });
    
                    }
    
                });
    
             })(jQuery);
    
            </script>
        <?php }
    }
    add_action( \'admin_head-post.php\', \'excerpt_count_js\');
    add_action( \'admin_head-post-new.php\', \'excerpt_count_js\');
    ?>
    
    它没有检查是否#postexcerpt 甚至在页面上,所以我添加了它,并试图清理它,使其更易于理解和更改。我不喜欢内联样式,但哦,好吧。

    无论如何,我在2016年安装的干净的4.6.1安装上测试了这个,它运行得很好。如果这对你不起作用,请告诉我。