PluginProbe
Yoast SEO – Advanced SEO with real-time guidance and built-in AI / 18.1
Yoast SEO – Advanced SEO with real-time guidance and built-in AI v18.1
28.5 28.4 28.3 28.2 28.1 28.0 27.9 27.8 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 All 129 releases
wordpress-seo / admin / class-suggested-plugins.php

class-suggested-plugins.php in Yoast SEO – Advanced SEO with real-time guidance and built-in AI 18.1, at admin/class-suggested-plugins.php

162 lines 5.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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