← All changes
|
includes/abilities/content/class-get-post-content.php
+12
-4
2.10.0
→
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 | } |
| @@ -44,9 +45,9 @@ | ||
| 44 | 45 | */ |
| 45 | 46 | public function __construct() { |
| 46 | 47 | $this->id = 'thinkrank/get-post-content'; |
| 47 | 48 | $this->label = __( 'Get ThinkRank Post Content', 'thinkrank' ); |
| 48 | - $this->description = __( 'Read a post or page\'s body content so you can judge what it is about before changing its SEO fields. Returns the text the page actually renders — resolved from the page builder when one owns the page — plus the raw stored post_content and which builder is in use. Read-only: use update-post-seo to change SEO fields. Use list-content-items to find ids.', 'thinkrank' ); | |
| 49 | + $this->description = __( 'Read a post or page\'s body content so you can judge what it is about before changing its SEO fields. Returns the text the page actually renders, resolved from the page builder when one owns the page, plus the raw stored post_content and which builder is in use. Read-only: use update-post-seo to change SEO fields. Use list-content-items to find ids.', 'thinkrank' ); | |
| 49 | 50 | } |
| 50 | 51 | |
| 51 | 52 | /** |
| 52 | 53 | * {@inheritDoc} |
| @@ -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 | |