Found a Better Way
-
This plugin is a bit over the top for my needs.
I just want a little box to display the number of words in the post (under all the other little boxes on the right side that has Revisions, Tags, Categories, underneath those).
Placed this in my functions.php and it does the trick.
/* START word count post */ function add_word_count_meta_box() { add_meta_box('word_count_meta_box', 'Word Count', 'word_count_callback', 'post', 'side'); } function word_count_callback($post) { // We'll use JavaScript to update this live echo '<div id="word-count-wrapper">Word Count: <span id="word-count">0</span></div>'; ?> <script type="text/javascript"> jQuery(document).ready(function($) { var updateWordCount = function() { var content; if (window.tinymce) { var editor = tinymce.get('content'); if (editor && editor instanceof tinymce.Editor) { content = editor.getContent({ format: 'text' }); } else { content = $('#content').val(); } } else { content = $('#content').val(); } var wordCount = content.split(/\s+/).filter(function(word) { return word.length > 0; }).length; $('#word-count').text(wordCount); }; // For classic editor $('#content').on('input', updateWordCount); // For block editor if (window.wp && wp.data && wp.data.subscribe) { var checkForWordCountUpdate = function() { var content = wp.data.select('core/editor').getEditedPostContent(); var wordCount = content.split(/\s+/).filter(function(word) { return word.length > 0; }).length; $('#word-count').text(wordCount); }; wp.data.subscribe(checkForWordCountUpdate); } // Initial count on page load updateWordCount(); }); </script> <?php } add_action('add_meta_boxes', 'add_word_count_meta_box'); /* END word count post */
The code provided for the WordPress word count functionality defines a word as any sequence of characters separated by whitespace. Specifically, this is how the word count is calculated:
- Splitting the Text: The
split(/\s+/)
function in JavaScript is used to split the content of the post into an array of substrings using a regular expression. The\s+
pattern matches any sequence of whitespace characters (spaces, tabs, newlines, etc.). - Filtering Non-Empty Words: The
filter(function(word) { return word.length > 0; })
part of the code filters out any empty strings from the array. This is important because the split function can create empty strings if there are spaces at the beginning or end of the text, or multiple spaces in a row. - Counting Words: The
length
property of the resulting array (after splitting and filtering) gives the number of words. Each element of the array represents a word.
With this code, a word is any non-empty string of characters that is separated from other words by one or more whitespace characters. This is a common and general way to count words, but it does have limitations. For example, it doesn’t account for words joined by hyphens (like “long-term”) or apostrophes (like “don’t”), which are typically counted as single words. Additionally, numbers or strings of punctuation without spaces would also be counted as words.
This approach is suitable for a general word count feature, but for more advanced or specific word counting rules, the code would need to be adjusted accordingly.
- Splitting the Text: The
- The topic ‘Found a Better Way’ is closed to new replies.