PluginProbe
WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services / 8.3.8
WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services v8.3.8
8.7.7 8.7.6 8.7.5 8.7.4 8.7.3 8.7.2 8.7.1 8.7.0 8.6.9 8.6.8 8.6.7 8.6.6 8.6.5 8.6.4 8.6.2 8.6.1 8.6.0 8.5.9 8.5.8 8.5.7 8.5.6 8.5.5 8.5.4 8.5.3 8.5.2 All 533 releases
← All changes | qcld-recommendbot-plugin.php +276 -276 8.5.88.3.8 View file →
@@ -1,277 +1,277 @@
1 -<?php
2 -if ( ! defined( 'ABSPATH' ) ) exit;
3 -require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
4 -remove_all_filters('plugins_api');
5 -$qcld_chatplugintags = array(
6 - 'a' => array(
7 - 'href' => array(),
8 - 'title' => array(),
9 - 'target' => array(),
10 - ),
11 -);
12 -
13 -$qcld_plugininstal = array();
14 -
15 -/* Conversational Forms Plugins */
16 - $argus = [
17 - 'slug' => 'conversational-forms',
18 - 'fields' => [
19 - 'short_description' => true,
20 - 'icons' => true,
21 - 'reviews' => false, // excludes all reviews
22 - ],
23 - ];
24 -
25 - $data = plugins_api( 'plugin_information', $argus );
26 - if ( $data && ! is_wp_error( $data ) ) {
27 - $qcld_plugininstal['convers-form'] = $data;
28 - $qcld_plugininstal['convers-form']->name = 'Conversational Forms for ChatBot';
29 - }
30 -?>
31 -
32 -<div class="wrap recommended-plugins">
33 - <div class="wp-list-table widefat plugin-install">
34 - <div class="the-list">
35 - <?php
36 - foreach ( (array) $qcld_plugininstal as $plugin ) {
37 - if ( is_object( $plugin ) ) {
38 - $plugin = (array) $plugin;
39 - }
40 -
41 - // Display the group heading if there is one.
42 - if ( isset( $plugin['group'] ) && $plugin['group'] != $group ) {
43 - if ( isset( $this->groups[ $plugin['group'] ] ) ) {
44 - $group_name = $this->groups[ $plugin['group'] ];
45 - if ( isset( $plugins_group_titles[ $group_name ] ) ) {
46 - $group_name = $plugins_group_titles[ $group_name ];
47 - }
48 - } else {
49 - $group_name = $plugin['group'];
50 - }
51 -
52 - // Starting a new group, close off the divs of the last one.
53 - if ( ! empty( $group ) ) {
54 - echo '</div></div>';
55 - }
56 -
57 - echo '<div class="plugin-group"><h3>' . esc_html( $group_name ) . '</h3>';
58 - // Needs an extra wrapping div for nth-child selectors to work.
59 - echo '<div class="plugin-items">';
60 -
61 - $group = $plugin['group'];
62 - }
63 - $title = wp_kses( $plugin['name'], $qcld_chatplugintags );
64 -
65 - // Remove any HTML from the description.
66 - $description = wp_strip_all_tags( $plugin['short_description'] );
67 - $version = wp_kses( $plugin['version'], $qcld_chatplugintags );
68 -
69 - $name = wp_strip_all_tags( $title . ' ' . $version );
70 -
71 - $author = wp_kses( $plugin['author'], $qcld_chatplugintags );
72 - if ( ! empty( $author ) ) {
73 - /* translators: %s: Plugin author. */
74 - $author = ' <cite>' . sprintf( __( 'By %s', 'chatbot' ), $author ) . '</cite>';
75 - }
76 -
77 - $requires_php = isset( $plugin['requires_php'] ) ? $plugin['requires_php'] : null;
78 - $requires_wp = isset( $plugin['requires'] ) ? $plugin['requires'] : null;
79 -
80 - $compatible_php = is_php_version_compatible( $requires_php );
81 - $compatible_wp = is_wp_version_compatible( $requires_wp );
82 - $tested_wp = ( empty( $plugin['tested'] ) || version_compare( get_bloginfo( 'version' ), $plugin['tested'], '<=' ) );
83 -
84 - $action_links = array();
85 -
86 - if ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) {
87 - $status = install_plugin_install_status( $plugin );
88 -
89 - switch ( $status['status'] ) {
90 - case 'install':
91 - if ( $status['url'] ) {
92 - if ( $compatible_php && $compatible_wp ) {
93 - $action_links[] = sprintf(
94 - '<a class="install-now button" data-slug="%s" href="%s" aria-label="%s" data-name="%s">%s</a>',
95 - esc_attr( $plugin['slug'] ),
96 - esc_url( $status['url'] ),
97 - /* translators: %s: Plugin name and version. */
98 - esc_attr( sprintf( _x( 'Install %s now', 'Install plugin', 'chatbot' ), $name ) ),
99 -
100 - esc_attr( $name ),
101 - __( 'Install Now', 'chatbot' )
102 - );
103 - } else {
104 - $action_links[] = sprintf(
105 - '<button type="button" class="button button-disabled" disabled="disabled">%s</button>',
106 - __( 'Cannot Install', 'chatbot' )
107 - );
108 - }
109 - }
110 - break;
111 -
112 - case 'update_available':
113 - if ( $status['url'] ) {
114 - if ( $compatible_php && $compatible_wp ) {
115 - $action_links[] = sprintf(
116 - '<a class="update-now button aria-button-if-js" data-plugin="%s" data-slug="%s" href="%s" aria-label="%s" data-name="%s">%s</a>',
117 - esc_attr( $status['file'] ),
118 - esc_attr( $plugin['slug'] ),
119 - esc_url( $status['url'] ),
120 - /* translators: %s: Plugin name and version. */
121 - esc_attr( sprintf( _x( 'Update %s now', 'Update plugin', 'chatbot' ), $name ) ),
122 -
123 - esc_attr( $name ),
124 - __( 'Update Now', 'chatbot' )
125 - );
126 - } else {
127 - $action_links[] = sprintf(
128 - '<button type="button" class="button button-disabled" disabled="disabled">%s</button>',
129 - __( 'Cannot Update', 'chatbot' )
130 - );
131 - }
132 - }
133 - break;
134 -
135 - case 'latest_installed':
136 - case 'newer_installed':
137 - if ( is_plugin_active( $status['file'] ) ) {
138 - $action_links[] = sprintf(
139 - '<button type="button" class="button button-disabled" disabled="disabled">%s</button>',
140 - __( 'Active', 'chatbot' )
141 - );
142 - } elseif ( current_user_can( 'activate_plugin', $status['file'] ) ) {
143 - $button_text = __( 'Activate', 'chatbot' );
144 - /* translators: %s: Plugin name. */
145 - $button_label = _x( 'Activate %s', 'plugin name', 'chatbot' );
146 - $activate_url = add_query_arg(
147 - array(
148 - '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $status['file'] ),
149 - 'action' => 'activate',
150 - 'plugin' => $status['file'],
151 - ),
152 - network_admin_url( 'plugins.php' )
153 - );
154 -
155 - if ( is_network_admin() ) {
156 - $button_text = __( 'Network Activate', 'chatbot' );
157 - /* translators: %s: Plugin name. */
158 - $button_label = _x( 'Network Activate %s', 'plugin name', 'chatbot' );
159 - $activate_url = add_query_arg( array( 'networkwide' => 1 ), $activate_url );
160 - }
161 -
162 - $action_links[] = sprintf(
163 - '<a href="%1$s" class="button activate-now" aria-label="%2$s">%3$s</a>',
164 - esc_url( $activate_url ),
165 - esc_attr( sprintf( $button_label, $plugin['name'] ) ),
166 - $button_text
167 - );
168 - } else {
169 - $action_links[] = sprintf(
170 - '<button type="button" class="button button-disabled" disabled="disabled">%s</button>',
171 - _x( 'Installed', 'plugin status', 'chatbot' )
172 - );
173 - }
174 - break;
175 - }
176 - }
177 -
178 - $details_link = self_admin_url(
179 - 'plugin-install.php?tab=plugin-information&amp;plugin=' . $plugin['slug'] .
180 - '&amp;width=700&amp;height=550'
181 - );
182 - $action_links[] = sprintf( '%s','<a href="#" data-toggle="modal" data-target="#myModal">More Details</a><div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button></div><div class="modal-body"><iframe width="100%" height="550" src="'.$details_link.'"></iframe></div></div></div></div>');
183 - /*===show icon ==*/
184 - if ( ! empty( $plugin['icons']['svg'] ) ) {
185 - $plugin_icon_url = $plugin['icons']['svg'];
186 - } elseif ( ! empty( $plugin['icons']['2x'] ) ) {
187 - $plugin_icon_url = $plugin['icons']['2x'];
188 - } elseif ( ! empty( $plugin['icons']['1x'] ) ) {
189 - $plugin_icon_url = $plugin['icons']['1x'];
190 - } else {
191 - $plugin_icon_url = $plugin['icons']['default'];
192 - }
193 - /*
194 - * $action_links An array of plugin action links. Defaults are links to Details and Install Now.
195 - * $plugin The plugin currently being listed.
196 - */
197 - $action_links = apply_filters( 'plugin_install_action_links', $action_links, $plugin );
198 -
199 - $last_updated_timestamp = strtotime( $plugin['last_updated'] );
200 - ?>
201 - <div class="plugin-card plugin-card-<?php echo sanitize_html_class( $plugin['slug'] ); ?>">
202 - <?php
203 - if ( ! $compatible_php || ! $compatible_wp ) {
204 - echo '<div class="notice inline notice-error notice-alt"><p>';
205 - if ( ! $compatible_php && ! $compatible_wp ) {
206 - esc_html_e( 'This plugin doesn&#8217;t work with your versions of WordPress and PHP.', 'chatbot' );
207 - if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) {
208 - printf(
209 - /* translators: 1: URL to WordPress Updates screen, 2: URL to Update PHP page. */
210 - '<a href="%1$s">Please update WordPress</a>, and then <a href="%2$s">learn more about updating PHP</a>.',
211 - esc_url( self_admin_url( 'update-core.php' ) ),
212 - esc_url( wp_get_update_php_url() )
213 - );
214 - wp_update_php_annotation( '</p><p><em>', '</em>' );
215 - } elseif ( current_user_can( 'update_core' ) ) {
216 - printf(
217 - /* translators: %s: URL to WordPress Updates screen. */
218 - '<a href="%s">Please update WordPress</a>.',
219 - esc_url( self_admin_url( 'update-core.php' ) )
220 - );
221 - } elseif ( current_user_can( 'update_php' ) ) {
222 - printf(
223 - /* translators: %s: URL to Update PHP page. */
224 - '<a href="%s">Learn more about updating PHP</a>.',
225 - esc_url( wp_get_update_php_url() )
226 - );
227 - wp_update_php_annotation( '</p><p><em>', '</em>' );
228 - }
229 - } elseif ( ! $compatible_wp ) {
230 - esc_html_e( 'This plugin doesn&#8217;t work with your version of WordPress.', 'chatbot' );
231 - if ( current_user_can( 'update_core' ) ) {
232 - printf(
233 - /* translators: %s: URL to WordPress Updates screen. */
234 - '<a href="%s">Please update WordPress</a>.',
235 - esc_url( self_admin_url( 'update-core.php' ) )
236 - );
237 - }
238 - } elseif ( ! $compatible_php ) {
239 - esc_html_e( 'This plugin doesn&#8217;t work with your version of PHP.', 'chatbot' );
240 - if ( current_user_can( 'update_php' ) ) {
241 - printf(
242 - /* translators: %s: URL to Update PHP page. */
243 - '<a href="%s">Learn more about updating PHP</a>.',
244 - esc_url( wp_get_update_php_url() )
245 - );
246 - wp_update_php_annotation( '</p><p><em>', '</em>' );
247 - }
248 - }
249 - echo '</p></div>';
250 - }
251 - ?>
252 - <div class="plugin-card-top">
253 - <div class="name column-name">
254 - <h3>
255 - <a href="<?php echo esc_url( $details_link ); ?>" class="thickbox open-plugin-details-modal">
256 - <?php echo esc_attr($title); ?>
257 - <img src="<?php echo esc_attr( $plugin_icon_url ); ?>" class="plugin-icon" alt="" />
258 - </a>
259 - </h3>
260 - </div>
261 - <div class="action-links">
262 - <?php
263 - if ( $action_links ) {
264 - // phpcs:ignore
265 - echo '<ul class="plugin-action-buttons"><li>' . implode( '</li><li>', $action_links ) . '</li></ul>';
266 - }
267 - ?>
268 - </div>
269 -
270 - </div>
271 - </div>
272 - <?php
273 - } ?>
274 - </div>
275 - </div>
276 -
1 +<?php
2 +if ( ! defined( 'ABSPATH' ) ) exit;
3 +require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
4 +remove_all_filters('plugins_api');
5 +$qcld_chatplugintags = array(
6 + 'a' => array(
7 + 'href' => array(),
8 + 'title' => array(),
9 + 'target' => array(),
10 + ),
11 +);
12 +
13 +$qcld_plugininstal = array();
14 +
15 +/* Conversational Forms Plugins */
16 + $argus = [
17 + 'slug' => 'conversational-forms',
18 + 'fields' => [
19 + 'short_description' => true,
20 + 'icons' => true,
21 + 'reviews' => false, // excludes all reviews
22 + ],
23 + ];
24 +
25 + $data = plugins_api( 'plugin_information', $argus );
26 + if ( $data && ! is_wp_error( $data ) ) {
27 + $qcld_plugininstal['convers-form'] = $data;
28 + $qcld_plugininstal['convers-form']->name = 'Conversational Forms for ChatBot';
29 + }
30 +?>
31 +
32 +<div class="wrap recommended-plugins">
33 + <div class="wp-list-table widefat plugin-install">
34 + <div class="the-list">
35 + <?php
36 + foreach ( (array) $qcld_plugininstal as $plugin ) {
37 + if ( is_object( $plugin ) ) {
38 + $plugin = (array) $plugin;
39 + }
40 +
41 + // Display the group heading if there is one.
42 + if ( isset( $plugin['group'] ) && $plugin['group'] != $group ) {
43 + if ( isset( $this->groups[ $plugin['group'] ] ) ) {
44 + $group_name = $this->groups[ $plugin['group'] ];
45 + if ( isset( $plugins_group_titles[ $group_name ] ) ) {
46 + $group_name = $plugins_group_titles[ $group_name ];
47 + }
48 + } else {
49 + $group_name = $plugin['group'];
50 + }
51 +
52 + // Starting a new group, close off the divs of the last one.
53 + if ( ! empty( $group ) ) {
54 + echo '</div></div>';
55 + }
56 +
57 + echo '<div class="plugin-group"><h3>' . esc_html( $group_name ) . '</h3>';
58 + // Needs an extra wrapping div for nth-child selectors to work.
59 + echo '<div class="plugin-items">';
60 +
61 + $group = $plugin['group'];
62 + }
63 + $title = wp_kses( $plugin['name'], $qcld_chatplugintags );
64 +
65 + // Remove any HTML from the description.
66 + $description = wp_strip_all_tags( $plugin['short_description'] );
67 + $version = wp_kses( $plugin['version'], $qcld_chatplugintags );
68 +
69 + $name = wp_strip_all_tags( $title . ' ' . $version );
70 +
71 + $author = wp_kses( $plugin['author'], $qcld_chatplugintags );
72 + if ( ! empty( $author ) ) {
73 + /* translators: %s: Plugin author. */
74 + $author = ' <cite>' . sprintf( __( 'By %s', 'chatbot' ), $author ) . '</cite>';
75 + }
76 +
77 + $requires_php = isset( $plugin['requires_php'] ) ? $plugin['requires_php'] : null;
78 + $requires_wp = isset( $plugin['requires'] ) ? $plugin['requires'] : null;
79 +
80 + $compatible_php = is_php_version_compatible( $requires_php );
81 + $compatible_wp = is_wp_version_compatible( $requires_wp );
82 + $tested_wp = ( empty( $plugin['tested'] ) || version_compare( get_bloginfo( 'version' ), $plugin['tested'], '<=' ) );
83 +
84 + $action_links = array();
85 +
86 + if ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) {
87 + $status = install_plugin_install_status( $plugin );
88 +
89 + switch ( $status['status'] ) {
90 + case 'install':
91 + if ( $status['url'] ) {
92 + if ( $compatible_php && $compatible_wp ) {
93 + $action_links[] = sprintf(
94 + '<a class="install-now button" data-slug="%s" href="%s" aria-label="%s" data-name="%s">%s</a>',
95 + esc_attr( $plugin['slug'] ),
96 + esc_url( $status['url'] ),
97 + /* translators: %s: Plugin name and version. */
98 + esc_attr( sprintf( _x( 'Install %s now', 'Install plugin', 'chatbot' ), $name ) ),
99 +
100 + esc_attr( $name ),
101 + __( 'Install Now', 'chatbot' )
102 + );
103 + } else {
104 + $action_links[] = sprintf(
105 + '<button type="button" class="button button-disabled" disabled="disabled">%s</button>',
106 + __( 'Cannot Install', 'chatbot' )
107 + );
108 + }
109 + }
110 + break;
111 +
112 + case 'update_available':
113 + if ( $status['url'] ) {
114 + if ( $compatible_php && $compatible_wp ) {
115 + $action_links[] = sprintf(
116 + '<a class="update-now button aria-button-if-js" data-plugin="%s" data-slug="%s" href="%s" aria-label="%s" data-name="%s">%s</a>',
117 + esc_attr( $status['file'] ),
118 + esc_attr( $plugin['slug'] ),
119 + esc_url( $status['url'] ),
120 + /* translators: %s: Plugin name and version. */
121 + esc_attr( sprintf( _x( 'Update %s now', 'Update plugin', 'chatbot' ), $name ) ),
122 +
123 + esc_attr( $name ),
124 + __( 'Update Now', 'chatbot' )
125 + );
126 + } else {
127 + $action_links[] = sprintf(
128 + '<button type="button" class="button button-disabled" disabled="disabled">%s</button>',
129 + __( 'Cannot Update', 'chatbot' )
130 + );
131 + }
132 + }
133 + break;
134 +
135 + case 'latest_installed':
136 + case 'newer_installed':
137 + if ( is_plugin_active( $status['file'] ) ) {
138 + $action_links[] = sprintf(
139 + '<button type="button" class="button button-disabled" disabled="disabled">%s</button>',
140 + __( 'Active', 'chatbot' )
141 + );
142 + } elseif ( current_user_can( 'activate_plugin', $status['file'] ) ) {
143 + $button_text = __( 'Activate', 'chatbot' );
144 + /* translators: %s: Plugin name. */
145 + $button_label = _x( 'Activate %s', 'plugin name', 'chatbot' );
146 + $activate_url = add_query_arg(
147 + array(
148 + '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $status['file'] ),
149 + 'action' => 'activate',
150 + 'plugin' => $status['file'],
151 + ),
152 + network_admin_url( 'plugins.php' )
153 + );
154 +
155 + if ( is_network_admin() ) {
156 + $button_text = __( 'Network Activate', 'chatbot' );
157 + /* translators: %s: Plugin name. */
158 + $button_label = _x( 'Network Activate %s', 'plugin name', 'chatbot' );
159 + $activate_url = add_query_arg( array( 'networkwide' => 1 ), $activate_url );
160 + }
161 +
162 + $action_links[] = sprintf(
163 + '<a href="%1$s" class="button activate-now" aria-label="%2$s">%3$s</a>',
164 + esc_url( $activate_url ),
165 + esc_attr( sprintf( $button_label, $plugin['name'] ) ),
166 + $button_text
167 + );
168 + } else {
169 + $action_links[] = sprintf(
170 + '<button type="button" class="button button-disabled" disabled="disabled">%s</button>',
171 + _x( 'Installed', 'plugin status', 'chatbot' )
172 + );
173 + }
174 + break;
175 + }
176 + }
177 +
178 + $details_link = self_admin_url(
179 + 'plugin-install.php?tab=plugin-information&amp;plugin=' . $plugin['slug'] .
180 + '&amp;width=700&amp;height=550'
181 + );
182 + $action_links[] = sprintf( '%s','<a href="#" data-toggle="modal" data-target="#myModal">More Details</a><div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button></div><div class="modal-body"><iframe width="100%" height="550" src="'.$details_link.'"></iframe></div></div></div></div>');
183 + /*===show icon ==*/
184 + if ( ! empty( $plugin['icons']['svg'] ) ) {
185 + $plugin_icon_url = $plugin['icons']['svg'];
186 + } elseif ( ! empty( $plugin['icons']['2x'] ) ) {
187 + $plugin_icon_url = $plugin['icons']['2x'];
188 + } elseif ( ! empty( $plugin['icons']['1x'] ) ) {
189 + $plugin_icon_url = $plugin['icons']['1x'];
190 + } else {
191 + $plugin_icon_url = $plugin['icons']['default'];
192 + }
193 + /*
194 + * $action_links An array of plugin action links. Defaults are links to Details and Install Now.
195 + * $plugin The plugin currently being listed.
196 + */
197 + $action_links = apply_filters( 'plugin_install_action_links', $action_links, $plugin );
198 +
199 + $last_updated_timestamp = strtotime( $plugin['last_updated'] );
200 + ?>
201 + <div class="plugin-card plugin-card-<?php echo sanitize_html_class( $plugin['slug'] ); ?>">
202 + <?php
203 + if ( ! $compatible_php || ! $compatible_wp ) {
204 + echo '<div class="notice inline notice-error notice-alt"><p>';
205 + if ( ! $compatible_php && ! $compatible_wp ) {
206 + esc_html_e( 'This plugin doesn&#8217;t work with your versions of WordPress and PHP.', 'chatbot' );
207 + if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) {
208 + printf(
209 + /* translators: 1: URL to WordPress Updates screen, 2: URL to Update PHP page. */
210 + '<a href="%1$s">Please update WordPress</a>, and then <a href="%2$s">learn more about updating PHP</a>.',
211 + esc_url( self_admin_url( 'update-core.php' ) ),
212 + esc_url( wp_get_update_php_url() )
213 + );
214 + wp_update_php_annotation( '</p><p><em>', '</em>' );
215 + } elseif ( current_user_can( 'update_core' ) ) {
216 + printf(
217 + /* translators: %s: URL to WordPress Updates screen. */
218 + '<a href="%s">Please update WordPress</a>.',
219 + esc_url( self_admin_url( 'update-core.php' ) )
220 + );
221 + } elseif ( current_user_can( 'update_php' ) ) {
222 + printf(
223 + /* translators: %s: URL to Update PHP page. */
224 + '<a href="%s">Learn more about updating PHP</a>.',
225 + esc_url( wp_get_update_php_url() )
226 + );
227 + wp_update_php_annotation( '</p><p><em>', '</em>' );
228 + }
229 + } elseif ( ! $compatible_wp ) {
230 + esc_html_e( 'This plugin doesn&#8217;t work with your version of WordPress.', 'chatbot' );
231 + if ( current_user_can( 'update_core' ) ) {
232 + printf(
233 + /* translators: %s: URL to WordPress Updates screen. */
234 + '<a href="%s">Please update WordPress</a>.',
235 + esc_url( self_admin_url( 'update-core.php' ) )
236 + );
237 + }
238 + } elseif ( ! $compatible_php ) {
239 + esc_html_e( 'This plugin doesn&#8217;t work with your version of PHP.', 'chatbot' );
240 + if ( current_user_can( 'update_php' ) ) {
241 + printf(
242 + /* translators: %s: URL to Update PHP page. */
243 + '<a href="%s">Learn more about updating PHP</a>.',
244 + esc_url( wp_get_update_php_url() )
245 + );
246 + wp_update_php_annotation( '</p><p><em>', '</em>' );
247 + }
248 + }
249 + echo '</p></div>';
250 + }
251 + ?>
252 + <div class="plugin-card-top">
253 + <div class="name column-name">
254 + <h3>
255 + <a href="<?php echo esc_url( $details_link ); ?>" class="thickbox open-plugin-details-modal">
256 + <?php echo esc_attr($title); ?>
257 + <img src="<?php echo esc_attr( $plugin_icon_url ); ?>" class="plugin-icon" alt="" />
258 + </a>
259 + </h3>
260 + </div>
261 + <div class="action-links">
262 + <?php
263 + if ( $action_links ) {
264 + // phpcs:ignore
265 + echo '<ul class="plugin-action-buttons"><li>' . implode( '</li><li>', $action_links ) . '</li></ul>';
266 + }
267 + ?>
268 + </div>
269 +
270 + </div>
271 + </div>
272 + <?php
273 + } ?>
274 + </div>
275 + </div>
276 +
277 277 </div>