3

The code below from WPSnipps provides an excerpt character counter, but I'd like to count words instead. Does anybody have an idea of how to do this?

// Excerpt character count
function excerpt_count_js(){
      echo '<script>jQuery(document).ready(function(){
jQuery("#postexcerpt .handlediv").after("<div style=\"position:absolute;top:0px;right:5px;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).</small></div>");
     jQuery("#excerpt_counter").val(jQuery("#excerpt").val().length);
     jQuery("#excerpt").keyup( function() {
     jQuery("#excerpt_counter").val(jQuery("#excerpt").val().length);
   });
});</script>';
}
add_action( 'admin_head-post.php', 'excerpt_count_js');
add_action( 'admin_head-post-new.php', 'excerpt_count_js');
4
  • 2
    This example has to do with jQuery and would be better to ask on stackoverflow.com .
    – Wyck
    Commented Oct 22, 2012 at 3:13
  • 2
    Why do you want to reinvent the wheel? WordPress has a word counter already, just look at the regular post editor and use wp-admin/js/word-count.dev.js.
    – fuxia
    Commented Oct 22, 2012 at 3:16
  • 1
    @Wyck I'm not on stackoverflow... I was blocked, ironically, for asking questions like this which the admins decided was a WP question. Commented Oct 27, 2012 at 21:17
  • 2
    The question is asking for the simplest code to get a word count for excerpts in WP, which is relevant for this site. It happens that the question already contains all the wp-specific stuff (i.e. the right hooks, as debugged by others on the original wpsnipp) but still, I'm glad the solution was here on WordPress Answers.
    – jerclarke
    Commented Aug 2, 2013 at 16:23

2 Answers 2

3

Sorry for reading wrong your question @siouxfan45!

here is the right answer: just a little improvement in your code and you can count words!

just change these two lines:

jQuery("#excerpt_counter").val(jQuery("#excerpt").val().length);

to this:

jQuery("#excerpt_counter").val(jQuery("#excerpt").val().split(/\S\b[\s,\.\'-:;]*/).length - 1);

Words with single quote like "don't", "it's", "I'd", "won't"...will count as two! If you want them to count as a single word, then you will want to change the .split() to this:

.split(/\S+\b[\s,\.\'-:;]*/)

Hope I'm right this time!

1
  • Anytime buddy!!
    – KBRckr
    Commented Nov 13, 2012 at 5:48
3

While implementing this great answer (thanks!) I worked out what I think is a nicer way of displaying the number than the weird inactive field used by the original code. This shows just "Word count: $word_count" right below the textarea. The code below also incorporates KBRckr's code to count contractions (don't) as one word.

Screenshot of what my excerpt word count code gives you

<?php
/**
 * Use jQuery to add a word counter to the excerpt box
 *
 * Should attach to all post screens and indicate the number of words just below the #excerpt textarea
 */
function gv_excerpt_word_count_js() {
      echo '
     <script>jQuery(document).ready(function(){
jQuery("#postexcerpt #excerpt").after("Word Count: <strong><span id=\'excerpt-word-count\'></span></strong>");
     jQuery("#excerpt-word-count").html(jQuery("#excerpt").val().split(/\S+\b[\s,\.\'-:;]*/).length - 1);
     jQuery("#excerpt").keyup( function() {
     jQuery("#excerpt-word-count").html(jQuery("#excerpt").val().split(/\S+\b[\s,\.\'-:;]*/).length - 1);
   });
});</script>
    ';
}
add_action( 'admin_head-post.php', 'gv_excerpt_word_count_js');
add_action( 'admin_head-post-new.php', 'gv_excerpt_word_count_js');
?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.