PluginProbe ʕ •ᴥ•ʔ
Yoast SEO – Advanced SEO with real-time guidance and built-in AI / 18.6
Yoast SEO – Advanced SEO with real-time guidance and built-in AI v18.6
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-suggested-plugins.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 4 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 4 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 4 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-suggested-plugins.php
162 lines
1 <?php
2 /**
3 * WPSEO plugin file.
4 *
5 * @package WPSEO\Suggested_Plugins
6 */
7
8 /**
9 * Class WPSEO_Suggested_Plugins
10 */
11 class WPSEO_Suggested_Plugins implements WPSEO_WordPress_Integration {
12
13 /**
14 * Holds the availability checker.
15 *
16 * @var WPSEO_Plugin_Availability
17 */
18 protected $availability_checker;
19
20 /**
21 * Holds the notification center.
22 *
23 * @var Yoast_Notification_Center
24 */
25 protected $notification_center;
26
27 /**
28 * WPSEO_Suggested_Plugins constructor.
29 *
30 * @param WPSEO_Plugin_Availability $availability_checker The availability checker to use.
31 * @param Yoast_Notification_Center $notification_center The notification center to add notifications to.
32 */
33 public function __construct( WPSEO_Plugin_Availability $availability_checker, Yoast_Notification_Center $notification_center ) {
34 $this->availability_checker = $availability_checker;
35 $this->notification_center = $notification_center;
36 }
37
38 /**
39 * Registers all hooks to WordPress.
40 *
41 * @return void
42 */
43 public function register_hooks() {
44 add_action( 'admin_init', [ $this->availability_checker, 'register' ] );
45 add_action( 'admin_init', [ $this, 'add_notifications' ] );
46 }
47
48 /**
49 * Adds notifications (when necessary).
50 *
51 * @return void
52 */
53 public function add_notifications() {
54 $checker = $this->availability_checker;
55
56 // Get all Yoast plugins that have dependencies.
57 $plugins = $checker->get_plugins_with_dependencies();
58
59 foreach ( $plugins as $plugin_name => $plugin ) {
60 if ( ! $checker->dependencies_are_satisfied( $plugin ) ) {
61 continue;
62 }
63
64 $notification = $this->get_yoast_seo_suggested_plugins_notification( $plugin_name, $plugin );
65
66 if ( ! $checker->is_installed( $plugin ) || ! $checker->is_active( $plugin['slug'] ) ) {
67 $this->notification_center->add_notification( $notification );
68
69 continue;
70 }
71
72 $this->notification_center->remove_notification( $notification );
73 }
74 }
75
76 /**
77 * Build Yoast SEO suggested plugins notification.
78 *
79 * @param string $name The plugin name to use for the unique ID.
80 * @param array $plugin The plugin to retrieve the data from.
81 *
82 * @return Yoast_Notification The notification containing the suggested plugin.
83 */
84 protected function get_yoast_seo_suggested_plugins_notification( $name, $plugin ) {
85 $message = $this->create_install_suggested_plugin_message( $plugin );
86
87 if ( $this->availability_checker->is_installed( $plugin ) && ! $this->availability_checker->is_active( $plugin['slug'] ) ) {
88 $message = $this->create_activate_suggested_plugin_message( $plugin );
89 }
90
91 return new Yoast_Notification(
92 $message,
93 [
94 'id' => 'wpseo-suggested-plugin-' . $name,
95 'type' => Yoast_Notification::WARNING,
96 'capabilities' => [ 'install_plugins' ],
97 ]
98 );
99 }
100
101 /**
102 * Creates a message to suggest the installation of a particular plugin.
103 *
104 * @param array $suggested_plugin The suggested plugin.
105 *
106 * @return string The install suggested plugin message.
107 */
108 protected function create_install_suggested_plugin_message( $suggested_plugin ) {
109 /* translators: %1$s expands to an opening strong tag, %2$s expands to the dependency name, %3$s expands to a closing strong tag, %4$s expands to an opening anchor tag, %5$s expands to a closing anchor tag. */
110 $message = __( 'It looks like you aren\'t using our %1$s%2$s addon%3$s. %4$sUpgrade today%5$s to unlock more tools and SEO features to make your products stand out in search results.', 'wordpress-seo' );
111 $install_link = WPSEO_Admin_Utils::get_install_link( $suggested_plugin );
112
113 return sprintf(
114 $message,
115 '<strong>',
116 $install_link,
117 '</strong>',
118 $this->create_more_information_link( $suggested_plugin['url'], $suggested_plugin['title'] ),
119 '</a>'
120 );
121 }
122
123 /**
124 * Creates a more information link that directs the user to WordPress.org Plugin repository.
125 *
126 * @param string $url The URL to the plugin's page.
127 * @param string $name The name of the plugin.
128 *
129 * @return string The more information link.
130 */
131 protected function create_more_information_link( $url, $name ) {
132 return sprintf(
133 '<a href="%s" aria-label="%s" target="_blank" rel="noopener noreferrer">',
134 $url,
135 /* translators: %1$s expands to the dependency name. */
136 sprintf( __( 'More information about %1$s', 'wordpress-seo' ), $name )
137 );
138 }
139
140 /**
141 * Creates a message to suggest the activation of a particular plugin.
142 *
143 * @param array $suggested_plugin The suggested plugin.
144 *
145 * @return string The activate suggested plugin message.
146 */
147 protected function create_activate_suggested_plugin_message( $suggested_plugin ) {
148 /* translators: %1$s expands to an opening strong tag, %2$s expands to the dependency name, %3$s expands to a closing strong tag, %4$s expands to and opening anchor tag, %5$s expands to a closing anchor tag. */
149 $message = __( 'It looks like you\'ve installed our %1$s%2$s addon%3$s. %4$sActivate it now%5$s to unlock more tools and SEO features to make your products stand out in search results.', 'wordpress-seo' );
150 $activation_url = WPSEO_Admin_Utils::get_activation_url( $suggested_plugin['slug'] );
151
152 return sprintf(
153 $message,
154 '<strong>',
155 $suggested_plugin['title'],
156 '</strong>',
157 '<a href="' . $activation_url . '">',
158 '</a>'
159 );
160 }
161 }
162