PluginProbe ʕ •ᴥ•ʔ
Yoast SEO – Advanced SEO with real-time guidance and built-in AI / 18.0
Yoast SEO – Advanced SEO with real-time guidance and built-in AI v18.0
27.7 27.6 27.5 trunk 18.0 18.1 18.2 18.3 18.4 18.4.1 18.5 18.5.1 18.6 18.7 18.8 18.9 19.0 19.1 19.10 19.11 19.12 19.13 19.14 19.2 19.3 19.4 19.5 19.5.1 19.6 19.6.1 19.7 19.7.1 19.7.2 19.8 19.9 20.0 20.1 20.10 20.11 20.12 20.13 20.2 20.2.1 20.3 20.4 20.5 20.6 20.7 20.8 20.9 21.0 21.1 21.2 21.3 21.4 21.5 21.6 21.7 21.8 21.8.1 21.9 21.9.1 22.0 22.1 22.2 22.3 22.4 22.5 22.6 22.7 22.8 22.9 23.0 23.1 23.2 23.3 23.4 23.5 23.6 23.7 23.8 23.9 24.0 24.1 24.2 24.3 24.4 24.5 24.6 24.7 24.8 24.8.1 24.9 25.0 25.1 25.2 25.3 25.3.1 25.4 25.5 25.6 25.7 25.8 25.9 26.0 26.1 26.1.1 26.2 26.3 26.4 26.5 26.6 26.7 26.8 26.9 27.0 27.1 27.1.1 27.2 27.3 27.4
wordpress-seo / admin / class-plugin-availability.php
wordpress-seo / admin Last commit date
ajax 5 years ago capabilities 4 years ago endpoints 5 years ago exceptions 7 years ago filters 4 years ago formatter 4 years ago google_search_console 5 years ago import 4 years ago listeners 8 years ago menu 4 years ago metabox 4 years ago notifiers 4 years ago pages 4 years ago roles 5 years ago ryte 5 years ago services 5 years ago statistics 5 years ago taxonomy 4 years ago tracking 4 years ago views 4 years ago watchers 5 years ago admin-settings-changed-listener.php 5 years ago ajax.php 4 years ago class-admin-asset-analysis-worker-location.php 5 years ago class-admin-asset-dev-server-location.php 5 years ago class-admin-asset-location.php 8 years ago class-admin-asset-manager.php 4 years ago class-admin-asset-seo-location.php 4 years ago class-admin-asset-yoast-components-l10n.php 5 years ago class-admin-editor-specific-replace-vars.php 5 years ago class-admin-gutenberg-compatibility-notification.php 5 years ago class-admin-help-panel.php 5 years ago class-admin-init.php 4 years ago class-admin-recommended-replace-vars.php 6 years ago class-admin-user-profile.php 6 years ago class-admin-utils.php 5 years ago class-admin.php 4 years ago class-asset.php 5 years ago class-bulk-description-editor-list-table.php 5 years ago class-bulk-editor-list-table.php 4 years ago class-bulk-title-editor-list-table.php 6 years ago class-collector.php 6 years ago class-config.php 4 years ago class-customizer.php 5 years ago class-database-proxy.php 5 years ago class-export.php 5 years ago class-expose-shortlinks.php 4 years ago class-gutenberg-compatibility.php 4 years ago class-helpscout.php 5 years ago class-meta-columns.php 5 years ago class-my-yoast-proxy.php 5 years ago class-option-tab.php 4 years ago class-option-tabs-formatter.php 5 years ago class-option-tabs.php 5 years ago class-paper-presenter.php 5 years ago class-plugin-availability.php 5 years ago class-plugin-conflict.php 4 years ago class-premium-popup.php 5 years ago class-premium-upsell-admin-block.php 4 years ago class-primary-term-admin.php 5 years ago class-product-upsell-notice.php 5 years ago class-remote-request.php 5 years ago class-schema-person-upgrade-notification.php 4 years ago class-suggested-plugins.php 4 years ago class-yoast-columns.php 5 years ago class-yoast-dashboard-widget.php 4 years ago class-yoast-form.php 4 years ago class-yoast-input-validation.php 5 years ago class-yoast-network-admin.php 5 years ago class-yoast-network-settings-api.php 4 years ago class-yoast-notification-center.php 4 years ago class-yoast-notification.php 5 years ago class-yoast-notifications.php 5 years ago class-yoast-plugin-conflict.php 4 years ago index.php 10 years ago interface-collection.php 7 years ago interface-installable.php 8 years ago
class-plugin-availability.php
311 lines
1 <?php
2 /**
3 * WPSEO plugin file.
4 *
5 * @package WPSEO\Plugin_Availability
6 */
7
8 /**
9 * Class WPSEO_Plugin_Availability
10 */
11 class WPSEO_Plugin_Availability {
12
13 /**
14 * Holds the plugins.
15 *
16 * @var array
17 */
18 protected $plugins = [];
19
20 /**
21 * Registers the plugins so we can access them.
22 */
23 public function register() {
24 $this->register_yoast_plugins();
25 $this->register_yoast_plugins_status();
26 }
27
28 /**
29 * Registers all the available Yoast SEO plugins.
30 */
31 protected function register_yoast_plugins() {
32 $this->plugins = [
33 'yoast-seo-premium' => [
34 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1y7' ),
35 'title' => 'Yoast SEO Premium',
36 'description' => sprintf(
37 /* translators: %1$s expands to Yoast SEO */
38 __( 'The premium version of %1$s with more features & support.', 'wordpress-seo' ),
39 'Yoast SEO'
40 ),
41 'installed' => false,
42 'slug' => 'wordpress-seo-premium/wp-seo-premium.php',
43 'version_sync' => true,
44 'premium' => true,
45 ],
46
47 'video-seo-for-wordpress-seo-by-yoast' => [
48 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1y8' ),
49 'title' => 'Video SEO',
50 'description' => __( 'Optimize your videos to show them off in search results and get more clicks!', 'wordpress-seo' ),
51 'installed' => false,
52 'slug' => 'wpseo-video/video-seo.php',
53 'version_sync' => true,
54 'premium' => true,
55 ],
56
57 'yoast-news-seo' => [
58 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1y9' ),
59 'title' => 'News SEO',
60 'description' => __( 'Are you in Google News? Increase your traffic from Google News by optimizing for it!', 'wordpress-seo' ),
61 'installed' => false,
62 'slug' => 'wpseo-news/wpseo-news.php',
63 'version_sync' => true,
64 'premium' => true,
65 ],
66
67 'local-seo-for-yoast-seo' => [
68 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1ya' ),
69 'title' => 'Local SEO',
70 'description' => __( 'Rank better locally and in Google Maps, without breaking a sweat!', 'wordpress-seo' ),
71 'installed' => false,
72 'slug' => 'wordpress-seo-local/local-seo.php',
73 'version_sync' => true,
74 'premium' => true,
75 ],
76
77 'yoast-woocommerce-seo' => [
78 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1o0' ),
79 'title' => 'Yoast WooCommerce SEO',
80 'description' => sprintf(
81 /* translators: %1$s expands to Yoast SEO */
82 __( 'Seamlessly integrate WooCommerce with %1$s and get extra features!', 'wordpress-seo' ),
83 'Yoast SEO'
84 ),
85 '_dependencies' => [
86 'WooCommerce' => [
87 'slug' => 'woocommerce/woocommerce.php',
88 ],
89 ],
90 'installed' => false,
91 'slug' => 'wpseo-woocommerce/wpseo-woocommerce.php',
92 'version_sync' => true,
93 'premium' => true,
94 ],
95 ];
96 }
97
98 /**
99 * Sets certain plugin properties based on WordPress' status.
100 */
101 protected function register_yoast_plugins_status() {
102
103 foreach ( $this->plugins as $name => $plugin ) {
104
105 $plugin_slug = $plugin['slug'];
106 $plugin_path = WP_PLUGIN_DIR . '/' . $plugin_slug;
107
108 if ( file_exists( $plugin_path ) ) {
109 $plugin_data = get_plugin_data( $plugin_path, false, false );
110 $this->plugins[ $name ]['installed'] = true;
111 $this->plugins[ $name ]['version'] = $plugin_data['Version'];
112 $this->plugins[ $name ]['active'] = is_plugin_active( $plugin_slug );
113 }
114 }
115 }
116
117 /**
118 * Checks whether or not a plugin is known within the Yoast SEO collection.
119 *
120 * @param string $plugin The plugin to search for.
121 *
122 * @return bool Whether or not the plugin is exists.
123 */
124 protected function plugin_exists( $plugin ) {
125 return isset( $this->plugins[ $plugin ] );
126 }
127
128 /**
129 * Gets all the possibly available plugins.
130 *
131 * @return array Array containing the information about the plugins.
132 */
133 public function get_plugins() {
134 return $this->plugins;
135 }
136
137 /**
138 * Gets a specific plugin. Returns an empty array if it cannot be found.
139 *
140 * @param string $plugin The plugin to search for.
141 *
142 * @return array The plugin properties.
143 */
144 public function get_plugin( $plugin ) {
145 if ( ! $this->plugin_exists( $plugin ) ) {
146 return [];
147 }
148
149 return $this->plugins[ $plugin ];
150 }
151
152 /**
153 * Gets the version of the plugin.
154 *
155 * @param array $plugin The information available about the plugin.
156 *
157 * @return string The version associated with the plugin.
158 */
159 public function get_version( $plugin ) {
160 if ( ! isset( $plugin['version'] ) ) {
161 return '';
162 }
163
164 return $plugin['version'];
165 }
166
167 /**
168 * Checks if there are dependencies available for the plugin.
169 *
170 * @param array $plugin The information available about the plugin.
171 *
172 * @return bool Whether or not there is a dependency present.
173 */
174 public function has_dependencies( $plugin ) {
175 return ( isset( $plugin['_dependencies'] ) && ! empty( $plugin['_dependencies'] ) );
176 }
177
178 /**
179 * Gets the dependencies for the plugin.
180 *
181 * @param array $plugin The information available about the plugin.
182 *
183 * @return array Array containing all the dependencies associated with the plugin.
184 */
185 public function get_dependencies( $plugin ) {
186 if ( ! $this->has_dependencies( $plugin ) ) {
187 return [];
188 }
189
190 return $plugin['_dependencies'];
191 }
192
193 /**
194 * Checks if all dependencies are satisfied.
195 *
196 * @param array $plugin The information available about the plugin.
197 *
198 * @return bool Whether or not the dependencies are satisfied.
199 */
200 public function dependencies_are_satisfied( $plugin ) {
201 if ( ! $this->has_dependencies( $plugin ) ) {
202 return true;
203 }
204
205 $dependencies = $this->get_dependencies( $plugin );
206 $installed_dependencies = array_filter( $dependencies, [ $this, 'is_dependency_available' ] );
207
208 return count( $installed_dependencies ) === count( $dependencies );
209 }
210
211 /**
212 * Checks whether or not one of the plugins is properly installed and usable.
213 *
214 * @param array $plugin The information available about the plugin.
215 *
216 * @return bool Whether or not the plugin is properly installed.
217 */
218 public function is_installed( $plugin ) {
219 if ( empty( $plugin ) ) {
220 return false;
221 }
222
223 return $this->is_available( $plugin );
224 }
225
226 /**
227 * Gets all installed plugins.
228 *
229 * @return array The installed plugins.
230 */
231 public function get_installed_plugins() {
232 $installed = [];
233
234 foreach ( $this->plugins as $plugin_key => $plugin ) {
235 if ( $this->is_installed( $plugin ) ) {
236 $installed[ $plugin_key ] = $plugin;
237 }
238 }
239
240 return $installed;
241 }
242
243 /**
244 * Checks for the availability of the plugin.
245 *
246 * @param array $plugin The information available about the plugin.
247 *
248 * @return bool Whether or not the plugin is available.
249 */
250 public function is_available( $plugin ) {
251 return isset( $plugin['installed'] ) && $plugin['installed'] === true;
252 }
253
254 /**
255 * Checks whether a dependency is available.
256 *
257 * @param array $dependency The information about the dependency to look for.
258 *
259 * @return bool Whether or not the dependency is available.
260 */
261 public function is_dependency_available( $dependency ) {
262 return isset( get_plugins()[ $dependency['slug'] ] );
263 }
264
265 /**
266 * Gets the names of the dependencies.
267 *
268 * @param array $plugin The plugin to get the dependency names from.
269 *
270 * @return array Array containing the names of the associated dependencies.
271 */
272 public function get_dependency_names( $plugin ) {
273 if ( ! $this->has_dependencies( $plugin ) ) {
274 return [];
275 }
276
277 return array_keys( $plugin['_dependencies'] );
278 }
279
280 /**
281 * Gets an array of plugins that have defined dependencies.
282 *
283 * @return array Array of the plugins that have dependencies.
284 */
285 public function get_plugins_with_dependencies() {
286 return array_filter( $this->plugins, [ $this, 'has_dependencies' ] );
287 }
288
289 /**
290 * Determines whether or not a plugin is active.
291 *
292 * @param string $plugin The plugin slug to check.
293 *
294 * @return bool Whether or not the plugin is active.
295 */
296 public function is_active( $plugin ) {
297 return is_plugin_active( $plugin );
298 }
299
300 /**
301 * Determines whether or not a plugin is a Premium product.
302 *
303 * @param array $plugin The plugin to check.
304 *
305 * @return bool Whether or not the plugin is a Premium product.
306 */
307 public function is_premium( $plugin ) {
308 return isset( $plugin['premium'] ) && $plugin['premium'] === true;
309 }
310 }
311