← All changes
|
includes/abilities/content/class-get-post-content.php
+11
-3
2.14.1
→
2.14.2
View file →
| @@ -10,8 +10,9 @@ | ||
| 10 | 10 | namespace ThinkRank\Abilities\Content; |
| 11 | 11 | |
| 12 | 12 | use ThinkRank\Abilities\Ability_Base; |
| 13 | 13 | use ThinkRank\SEO\Builder_Content; |
| 14 | +use ThinkRank\SEO\Word_Count_Index; | |
| 14 | 15 | |
| 15 | 16 | if ( ! defined( 'ABSPATH' ) ) { |
| 16 | 17 | exit; // Exit if accessed directly. |
| 17 | 18 | } |
| @@ -158,11 +159,18 @@ | ||
| 158 | 159 | [ 'status' => 403 ] |
| 159 | 160 | ); |
| 160 | 161 | } |
| 161 | 162 | |
| 162 | - $resolved = trim( wp_strip_all_tags( Builder_Content::resolve( $post ) ) ); | |
| 163 | - $builder = $this->builder_for( $post_id ); | |
| 163 | + $source = Builder_Content::resolve( $post ); | |
| 164 | + $resolved = trim( wp_strip_all_tags( $source ) ); | |
| 165 | + // Counted over the reading text rather than the body returned, so shortcode | |
| 166 | + // syntax is not counted as words and two words split only by a tag stay | |
| 167 | + // two (#893), and a token of punctuation alone is not a word. Words, | |
| 168 | + // whatever the locale: the field says words. | |
| 169 | + $reading = Word_Count_Index::reading_text( $source ); | |
| 164 | 170 | |
| 171 | + $builder = $this->builder_for( $post_id ); | |
| 172 | + | |
| 165 | 173 | $body = $resolved; |
| 166 | 174 | $truncated = false; |
| 167 | 175 | |
| 168 | 176 | if ( isset( $input['max_chars'] ) ) { |
| @@ -185,9 +193,9 @@ | ||
| 185 | 193 | 'content' => $body, |
| 186 | 194 | 'post_content' => (string) $post->post_content, |
| 187 | 195 | 'content_source' => null === $builder ? 'post_content' : 'builder', |
| 188 | 196 | 'builder' => $builder, |
| 189 | - 'word_count' => '' === $resolved ? 0 : count( preg_split( '/\s+/u', $resolved ) ?: [] ), | |
| 197 | + 'word_count' => Word_Count_Index::count_words( $reading ), | |
| 190 | 198 | 'truncated' => $truncated, |
| 191 | 199 | ]; |
| 192 | 200 | } |
| 193 | 201 | |