wpseek.com
A WordPress-centric search engine for devs and theme authors
block_core_post_time_to_read_word_count › WordPress Function
Since6.9.0
Deprecatedn/a
› block_core_post_time_to_read_word_count ( $text, $type )
Parameters: (2) |
|
Returns: |
|
Defined at: |
|
Codex: |
Counts words or characters in a provided text string.
This function currently employs an array of regular expressions to parse HTML and count words, which may result in inaccurate word counts. However, it is designed primarily to agree with the corresponding JavaScript function. Any improvements in the word counting, for example with the HTML API and {@see} should coordinate with changes to the JavaScript implementation to ensure consistency between the editor and the rendered page.Source
function block_core_post_time_to_read_word_count( $text, $type ) { $settings = array( 'html_regexp' => '/<\/?[a-z][^>]*?>/i', 'html_comment_regexp' => '/<!--[\s\S]*?-->/', 'space_regexp' => '/ | /i', 'html_entity_regexp' => '/&\S+?;/', 'connector_regexp' => "/--|\x{2014}/u", 'remove_regexp' => "/[\x{0021}-\x{0040}\x{005B}-\x{0060}\x{007B}-\x{007E}\x{0080}-\x{00BF}\x{00D7}\x{00F7}\x{2000}-\x{2BFF}\x{2E00}-\x{2E7F}]/u", 'astral_regexp' => "/[\x{010000}-\x{10FFFF}]/u", 'words_regexp' => '/\S\s+/u', 'characters_excluding_spaces_regexp' => '/\S/u', 'characters_including_spaces_regexp' => "/[^\f\n\r\t\v\x{00AD}\x{2028}\x{2029}]/u", ); $count = 0; if ( '' === trim( $text ) ) { return $count; } // Sanitize type to one of three possibilities: 'words', 'characters_excluding_spaces' or 'characters_including_spaces'. if ( 'characters_excluding_spaces' !== $type && 'characters_including_spaces' !== $type ) { $type = 'words'; } $text .= "\n"; // Replace all HTML with a new-line. $text = preg_replace( $settings['html_regexp'], "\n", $text ); // Remove all HTML comments. $text = preg_replace( $settings['html_comment_regexp'], '', $text ); // If a shortcode regular expression has been provided use it to remove shortcodes. if ( ! empty( $settings['shortcodes_regexp'] ) ) { $text = preg_replace( $settings['shortcodes_regexp'], "\n", $text ); } // Normalize non-breaking space to a normal space. $text = preg_replace( $settings['space_regexp'], ' ', $text ); if ( 'words' === $type ) { // Remove HTML Entities. $text = preg_replace( $settings['html_entity_regexp'], '', $text ); // Convert connectors to spaces to count attached text as words. $text = preg_replace( $settings['connector_regexp'], ' ', $text ); // Remove unwanted characters. $text = preg_replace( $settings['remove_regexp'], '', $text ); } else { // Convert HTML Entities to "a". $text = preg_replace( $settings['html_entity_regexp'], 'a', $text ); // Remove surrogate points. $text = preg_replace( $settings['astral_regexp'], 'a', $text ); } // Match with the selected type regular expression to count the items. return (int) preg_match_all( $settings[ $type . '_regexp' ], $text ); }