class-recalculate-posts.php
3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php
/**
* @package WPSEO\Admin
*/
/**
* This class handles the calculation of the SEO score for all posts with a filled focus keyword
*/
class WPSEO_Recalculate_Posts extends WPSEO_Recalculate {
/**
* Save the scores.
*
* @param array $scores The scores for the posts.
*/
public function save_scores( array $scores ) {
foreach ( $scores as $score ) {
$this->save_score( $score );
}
}
/**
* Save the score.
*
* @param array $score The score to save.
*/
protected function save_score( array $score ) {
WPSEO_Meta::set_value( 'linkdex', $score['score'], $score['item_id'] );
}
/**
* Get the posts from the database by doing a WP_Query.
*
* @param integer $paged The page.
*
* @return string
*/
protected function get_items( $paged ) {
$items_per_page = max( 1, $this->items_per_page );
$post_query = new WP_Query(
array(
'post_type' => 'any',
'meta_key' => '_yoast_wpseo_focuskw',
'posts_per_page' => $items_per_page,
'paged' => $paged,
)
);
return $post_query->get_posts();
}
/**
* Map the posts to a response array
*
* @param WP_Post $item The post for which to build the analyzer data.
*
* @return array
*/
protected function item_to_response( $item ) {
$focus_keyword = WPSEO_Meta::get_value( 'focuskw', $item->ID );
$content = $item->post_content;
// Check if there's a featured image.
$content .= $this->add_featured_image( $item );
/**
* Filter the post content for use in the SEO score recalculation.
*
* @param string $content Content of the post. Modify to reflect front-end content.
* @param WP_Post $item The Post object the content comes from.
*/
$content = apply_filters( 'wpseo_post_content_for_recalculation', $content, $item );
// Apply shortcodes.
$content = do_shortcode( $content );
return array(
'post_id' => $item->ID,
'text' => $content,
'keyword' => $focus_keyword,
'url' => urldecode( $item->post_name ),
'pageTitle' => apply_filters( 'wpseo_title', wpseo_replace_vars( $this->get_title( $item->ID, $item->post_type ), $item ) ),
'meta' => apply_filters( 'wpseo_metadesc', wpseo_replace_vars( $this->get_meta_description( $item->ID, $item->post_type ), $item ) ),
'keyword_usage' => array(
$focus_keyword => WPSEO_Meta::keyword_usage( $focus_keyword, $item->ID ),
),
);
}
/**
* Get the title for given post
*
* @param integer $post_id The ID of the post for which to get the title.
* @param string $post_type The post type.
*
* @return mixed|string
*/
private function get_title( $post_id, $post_type ) {
$title = WPSEO_Meta::get_value( 'title', $post_id );
if ( '' !== $title ) {
return $title;
}
$default_from_options = $this->default_from_options( 'title-tax', $post_type );
if ( false !== $default_from_options ) {
return str_replace( ' %%page%% ', ' ', $default_from_options );
}
return '%%title%%';
}
/**
* Get the meta description for given post
*
* @param integer $post_id The ID of the post for which to get the meta description.
* @param string $post_type The post type.
*
* @return bool|string
*/
private function get_meta_description( $post_id, $post_type ) {
$meta_description = WPSEO_Meta::get_value( 'metadesc', $post_id );
if ( '' !== $meta_description ) {
return $meta_description;
}
$default_from_options = $this->default_from_options( 'metadesc', $post_type );
if ( false !== $default_from_options ) {
return $default_from_options;
}
return '';
}
/**
* Retrieves the associated featured image if there is one present.
*
* @param WP_Post $item The post item to check for a featured image.
*
* @return string The image string.
*/
private function add_featured_image( $item ) {
if ( ! has_post_thumbnail( $item->ID ) ) {
return '';
}
return ' ' . get_the_post_thumbnail( $item->ID );
}
}