Version Description
(Released: March 04, 2021) = * Compatibility check up to version 5.7
Download this release
Release Info
Developer | catchthemes |
Plugin | Catch IDs |
Version | 2.2 |
Comparing to | |
See all releases |
Code changes from version 2.1 to 2.2
- catch-ids.php +2 -2
- includes/CatchThemesThemePlugin.php +484 -484
- languages/catch-ids.pot +3 -3
- readme.txt +141 -138
catch-ids.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* Plugin Name: Catch IDs
|
16 |
* Plugin URI: https://catchplugins.com/plugins/catch-ids/
|
17 |
* Description: Catch IDs is a simple and light weight plugin to show the Post ID, Page ID, Media ID, Links ID, Category ID, Tag ID and User ID in the Admin Section Table. This plugin was initially develop to support our themes features slider. Then we thought that this will be helpful to all the WordPress Admin Users. Just activate and catch IDs in your page, post, category, tag and media pages.
|
18 |
-
* Version: 2.
|
19 |
* Author: Catch Plugins
|
20 |
* Author URI: catchplugins.com
|
21 |
* License: GPL-3.0+
|
@@ -53,7 +53,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
53 |
|
54 |
|
55 |
// Define Version
|
56 |
-
define( 'CATCH_IDS_VERSION', '2.
|
57 |
|
58 |
// The URL of the directory that contains the plugin
|
59 |
if ( ! defined( 'CATCH_IDS_URL' ) ) {
|
15 |
* Plugin Name: Catch IDs
|
16 |
* Plugin URI: https://catchplugins.com/plugins/catch-ids/
|
17 |
* Description: Catch IDs is a simple and light weight plugin to show the Post ID, Page ID, Media ID, Links ID, Category ID, Tag ID and User ID in the Admin Section Table. This plugin was initially develop to support our themes features slider. Then we thought that this will be helpful to all the WordPress Admin Users. Just activate and catch IDs in your page, post, category, tag and media pages.
|
18 |
+
* Version: 2.2
|
19 |
* Author: Catch Plugins
|
20 |
* Author URI: catchplugins.com
|
21 |
* License: GPL-3.0+
|
53 |
|
54 |
|
55 |
// Define Version
|
56 |
+
define( 'CATCH_IDS_VERSION', '2.2' );
|
57 |
|
58 |
// The URL of the directory that contains the plugin
|
59 |
if ( ! defined( 'CATCH_IDS_URL' ) ) {
|
includes/CatchThemesThemePlugin.php
CHANGED
@@ -1,484 +1,484 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class CatchThemesThemePlugin {
|
4 |
-
public function __construct() {
|
5 |
-
remove_action( 'wp_ajax_query-themes', array( $this, 'wp_ajax_query_themes' ), 1 );
|
6 |
-
add_action( 'wp_ajax_query-themes', array( $this, 'wp_ajax_custom_query_themes' ), 1 );
|
7 |
-
|
8 |
-
add_action( 'admin_enqueue_scripts', array( $this, 'our_themes_script' ) );
|
9 |
-
|
10 |
-
if ( ! is_multisite() ) {
|
11 |
-
add_action( 'customize_register', array( $this, 'customize_register' ) );
|
12 |
-
}
|
13 |
-
|
14 |
-
global $wp_customize;
|
15 |
-
remove_action( 'wp_ajax_customize_load_themes', array( $wp_customize, 'handle_load_themes_request' ) );
|
16 |
-
add_action( 'wp_ajax_customize_load_themes', array( $this, 'handle_load_themes_request' ) );
|
17 |
-
|
18 |
-
add_filter( 'install_plugins_tabs', array( $this, 'add_our_plugins_tab' ), 1 );
|
19 |
-
add_filter( 'install_plugins_table_api_args_catchplugins', array( $this, 'catchplugins' ), 1 );
|
20 |
-
add_action( 'install_plugins_catchplugins', array( $this, 'plugins_table' ) );
|
21 |
-
}
|
22 |
-
|
23 |
-
/* Adds Catch Themes tab in Add Theme page to show all themes by Catch Themes in wordpress.org
|
24 |
-
* taken from wp-admin/includes/ajax-action.php wp_ajax_query_themes().
|
25 |
-
* Ajax handler for getting themes from themes_api().
|
26 |
-
*
|
27 |
-
* @since 3.9.0
|
28 |
-
*
|
29 |
-
* @global array $themes_allowedtags
|
30 |
-
* @global array $theme_field_defaults
|
31 |
-
*/
|
32 |
-
public function wp_ajax_custom_query_themes() {
|
33 |
-
global $themes_allowedtags, $theme_field_defaults;
|
34 |
-
|
35 |
-
if ( ! current_user_can( 'install_themes' ) ) {
|
36 |
-
wp_send_json_error();
|
37 |
-
}
|
38 |
-
|
39 |
-
$args = wp_parse_args(
|
40 |
-
wp_unslash( $_REQUEST['request'] ),
|
41 |
-
array(
|
42 |
-
'per_page' => 20,
|
43 |
-
'fields' => array_merge(
|
44 |
-
(array) $theme_field_defaults,
|
45 |
-
array(
|
46 |
-
'reviews_url' => true, // Explicitly request the reviews URL to be linked from the Add Themes screen.
|
47 |
-
)
|
48 |
-
),
|
49 |
-
)
|
50 |
-
);
|
51 |
-
|
52 |
-
if ( isset( $args['browse'] ) && 'catchthemes' === $args['browse'] && ! isset( $args['user'] ) ) {
|
53 |
-
$args['author'] = 'catchthemes';
|
54 |
-
unset( $args['browse'] );
|
55 |
-
}
|
56 |
-
|
57 |
-
if ( isset( $args['browse'] ) && 'favorites' === $args['browse'] && ! isset( $args['user'] ) ) {
|
58 |
-
$user = get_user_option( 'wporg_favorites' );
|
59 |
-
if ( $user ) {
|
60 |
-
$args['user'] = $user;
|
61 |
-
}
|
62 |
-
}
|
63 |
-
|
64 |
-
$old_filter = isset( $args['browse'] ) ? $args['browse'] : 'search';
|
65 |
-
|
66 |
-
/** This filter is documented in wp-admin/includes/class-wp-theme-install-list-table.php */
|
67 |
-
$args = apply_filters( 'install_themes_table_api_args_' . $old_filter, $args );
|
68 |
-
|
69 |
-
$api = themes_api( 'query_themes', $args );
|
70 |
-
|
71 |
-
if ( is_wp_error( $api ) ) {
|
72 |
-
wp_send_json_error();
|
73 |
-
}
|
74 |
-
|
75 |
-
$update_php = network_admin_url( 'update.php?action=install-theme' );
|
76 |
-
foreach ( $api->themes as &$theme ) {
|
77 |
-
$theme->install_url = add_query_arg(
|
78 |
-
array(
|
79 |
-
'theme' => $theme->slug,
|
80 |
-
'_wpnonce' => wp_create_nonce( 'install-theme_' . $theme->slug ),
|
81 |
-
),
|
82 |
-
$update_php
|
83 |
-
);
|
84 |
-
|
85 |
-
if ( current_user_can( 'switch_themes' ) ) {
|
86 |
-
if ( is_multisite() ) {
|
87 |
-
$theme->activate_url = add_query_arg(
|
88 |
-
array(
|
89 |
-
'action' => 'enable',
|
90 |
-
'_wpnonce' => wp_create_nonce( 'enable-theme_' . $theme->slug ),
|
91 |
-
'theme' => $theme->slug,
|
92 |
-
),
|
93 |
-
network_admin_url( 'themes.php' )
|
94 |
-
);
|
95 |
-
} else {
|
96 |
-
$theme->activate_url = add_query_arg(
|
97 |
-
array(
|
98 |
-
'action' => 'activate',
|
99 |
-
'_wpnonce' => wp_create_nonce( 'switch-theme_' . $theme->slug ),
|
100 |
-
'stylesheet' => $theme->slug,
|
101 |
-
),
|
102 |
-
admin_url( 'themes.php' )
|
103 |
-
);
|
104 |
-
}
|
105 |
-
}
|
106 |
-
|
107 |
-
if ( ! is_multisite() && current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) {
|
108 |
-
$theme->customize_url = add_query_arg(
|
109 |
-
array(
|
110 |
-
'return' => urlencode( network_admin_url( 'theme-install.php', 'relative' ) ),
|
111 |
-
),
|
112 |
-
wp_customize_url( $theme->slug )
|
113 |
-
);
|
114 |
-
}
|
115 |
-
|
116 |
-
$theme->name = wp_kses( $theme->name, $themes_allowedtags );
|
117 |
-
$theme->author = wp_kses( $theme->author['display_name'], $themes_allowedtags );
|
118 |
-
$theme->version = wp_kses( $theme->version, $themes_allowedtags );
|
119 |
-
$theme->description = wp_kses( $theme->description, $themes_allowedtags );
|
120 |
-
|
121 |
-
$theme->stars = wp_star_rating(
|
122 |
-
array(
|
123 |
-
'rating' => $theme->rating,
|
124 |
-
'type' => 'percent',
|
125 |
-
'number' => $theme->num_ratings,
|
126 |
-
'echo' => false,
|
127 |
-
)
|
128 |
-
);
|
129 |
-
|
130 |
-
$theme->num_ratings = number_format_i18n( $theme->num_ratings );
|
131 |
-
$theme->preview_url = set_url_scheme( $theme->preview_url );
|
132 |
-
$theme->compatible_wp = is_wp_version_compatible( $theme->requires );
|
133 |
-
$theme->compatible_php = is_php_version_compatible( $theme->requires_php );
|
134 |
-
|
135 |
-
}
|
136 |
-
|
137 |
-
wp_send_json_success( $api );
|
138 |
-
}
|
139 |
-
|
140 |
-
public function our_themes_script( $hook_suffix ) {
|
141 |
-
|
142 |
-
if ( 'theme-install.php' === $hook_suffix ) {
|
143 |
-
wp_enqueue_script( 'our-themes-script', plugin_dir_url( __FILE__ ) . '../js/our-themes.js', array( 'jquery' ), '2018-05-16' );
|
144 |
-
}
|
145 |
-
}
|
146 |
-
|
147 |
-
/* Add Catch Themes Section in Theme in Customizer */
|
148 |
-
public function customize_register( $wp_customize ) {
|
149 |
-
$wp_customize->add_section(
|
150 |
-
new WP_Customize_Themes_Section(
|
151 |
-
$wp_customize,
|
152 |
-
'catchthemes',
|
153 |
-
array(
|
154 |
-
'title' => __( 'Themes by CatchThemes', 'catch-themes-demo-import' ),
|
155 |
-
'action' => 'catchthemes',
|
156 |
-
'capability' => 'install_themes',
|
157 |
-
'panel' => 'themes',
|
158 |
-
'priority' => 6,
|
159 |
-
)
|
160 |
-
)
|
161 |
-
);
|
162 |
-
}
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
/**
|
168 |
-
* Load themes into the theme browsing/installation UI.
|
169 |
-
* taken from wp-includes/cllass-wp-customize-manager.php
|
170 |
-
* @since 4.9.0
|
171 |
-
*/
|
172 |
-
public function handle_load_themes_request() {
|
173 |
-
check_ajax_referer( 'switch_themes', 'nonce' );
|
174 |
-
if ( ! current_user_can( 'switch_themes' ) ) {
|
175 |
-
wp_die( -1 );
|
176 |
-
}
|
177 |
-
|
178 |
-
if ( empty( $_POST['theme_action'] ) ) {
|
179 |
-
wp_send_json_error( 'missing_theme_action' );
|
180 |
-
}
|
181 |
-
$theme_action = sanitize_key( $_POST['theme_action'] );
|
182 |
-
$themes = array();
|
183 |
-
$args = array();
|
184 |
-
|
185 |
-
// Define query filters based on user input.
|
186 |
-
if ( ! array_key_exists( 'search', $_POST ) ) {
|
187 |
-
$args['search'] = '';
|
188 |
-
} else {
|
189 |
-
$args['search'] = sanitize_text_field( wp_unslash( $_POST['search'] ) );
|
190 |
-
}
|
191 |
-
|
192 |
-
if ( ! array_key_exists( 'tags', $_POST ) ) {
|
193 |
-
$args['tag'] = '';
|
194 |
-
} else {
|
195 |
-
$args['tag'] = array_map( 'sanitize_text_field', wp_unslash( (array) $_POST['tags'] ) );
|
196 |
-
}
|
197 |
-
|
198 |
-
if ( ! array_key_exists( 'page', $_POST ) ) {
|
199 |
-
$args['page'] = 1;
|
200 |
-
} else {
|
201 |
-
$args['page'] = absint( $_POST['page'] );
|
202 |
-
}
|
203 |
-
|
204 |
-
require_once ABSPATH . 'wp-admin/includes/theme.php';
|
205 |
-
|
206 |
-
if ( 'installed' === $theme_action ) {
|
207 |
-
|
208 |
-
// Load all installed themes from wp_prepare_themes_for_js().
|
209 |
-
$themes = array( 'themes' => wp_prepare_themes_for_js() );
|
210 |
-
foreach ( $themes['themes'] as &$theme ) {
|
211 |
-
$theme['type'] = 'installed';
|
212 |
-
$theme['active'] = ( isset( $_POST['customized_theme'] ) && $_POST['customized_theme'] === $theme['id'] );
|
213 |
-
}
|
214 |
-
} elseif ( 'catchthemes' === $theme_action ) {
|
215 |
-
|
216 |
-
// Load WordPress.org themes from the .org API and normalize data to match installed theme objects.
|
217 |
-
if ( ! current_user_can( 'install_themes' ) ) {
|
218 |
-
wp_die( -1 );
|
219 |
-
}
|
220 |
-
|
221 |
-
// Arguments for all queries.
|
222 |
-
$wporg_args = array(
|
223 |
-
'per_page' => 100,
|
224 |
-
'fields' => array(
|
225 |
-
'reviews_url' => true, // Explicitly request the reviews URL to be linked from the customizer.
|
226 |
-
),
|
227 |
-
);
|
228 |
-
|
229 |
-
$args = array_merge( $wporg_args, $args );
|
230 |
-
|
231 |
-
if ( '' === $args['search'] && '' === $args['tag'] ) {
|
232 |
-
$args['browse'] = 'new'; // Sort by latest themes by default.
|
233 |
-
}
|
234 |
-
|
235 |
-
$args['author'] = 'catchthemes';
|
236 |
-
|
237 |
-
// Load themes from the .org API.
|
238 |
-
$themes = themes_api( 'query_themes', $args );
|
239 |
-
if ( is_wp_error( $themes ) ) {
|
240 |
-
wp_send_json_error();
|
241 |
-
}
|
242 |
-
|
243 |
-
// This list matches the allowed tags in wp-admin/includes/theme-install.php.
|
244 |
-
$themes_allowedtags = array_fill_keys(
|
245 |
-
array( 'a', 'abbr', 'acronym', 'code', 'pre', 'em', 'strong', 'div', 'p', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img' ),
|
246 |
-
array()
|
247 |
-
);
|
248 |
-
$themes_allowedtags['a'] = array_fill_keys( array( 'href', 'title', 'target' ), true );
|
249 |
-
$themes_allowedtags['acronym']['title'] = true;
|
250 |
-
$themes_allowedtags['abbr']['title'] = true;
|
251 |
-
$themes_allowedtags['img'] = array_fill_keys( array( 'src', 'class', 'alt' ), true );
|
252 |
-
|
253 |
-
// Prepare a list of installed themes to check against before the loop.
|
254 |
-
$installed_themes = array();
|
255 |
-
$wp_themes = wp_get_themes();
|
256 |
-
foreach ( $wp_themes as $theme ) {
|
257 |
-
$installed_themes[] = $theme->get_stylesheet();
|
258 |
-
}
|
259 |
-
$update_php = network_admin_url( 'update.php?action=install-theme' );
|
260 |
-
|
261 |
-
// Set up properties for themes available on WordPress.org.
|
262 |
-
foreach ( $themes->themes as &$theme ) {
|
263 |
-
$theme->install_url = add_query_arg(
|
264 |
-
array(
|
265 |
-
'theme' => $theme->slug,
|
266 |
-
'_wpnonce' => wp_create_nonce( 'install-theme_' . $theme->slug ),
|
267 |
-
),
|
268 |
-
$update_php
|
269 |
-
);
|
270 |
-
|
271 |
-
$theme->name = wp_kses( $theme->name, $themes_allowedtags );
|
272 |
-
$theme->version = wp_kses( $theme->version, $themes_allowedtags );
|
273 |
-
$theme->description = wp_kses( $theme->description, $themes_allowedtags );
|
274 |
-
$theme->stars = wp_star_rating(
|
275 |
-
array(
|
276 |
-
'rating' => $theme->rating,
|
277 |
-
'type' => 'percent',
|
278 |
-
'number' => $theme->num_ratings,
|
279 |
-
'echo' => false,
|
280 |
-
)
|
281 |
-
);
|
282 |
-
$theme->num_ratings = number_format_i18n( $theme->num_ratings );
|
283 |
-
$theme->preview_url = set_url_scheme( $theme->preview_url );
|
284 |
-
|
285 |
-
// Handle themes that are already installed as installed themes.
|
286 |
-
if ( in_array( $theme->slug, $installed_themes, true ) ) {
|
287 |
-
$theme->type = 'installed';
|
288 |
-
} else {
|
289 |
-
$theme->type = $theme_action;
|
290 |
-
}
|
291 |
-
|
292 |
-
// Set active based on customized theme.
|
293 |
-
$theme->active = ( isset( $_POST['customized_theme'] ) && $_POST['customized_theme'] === $theme->slug );
|
294 |
-
|
295 |
-
// Map available theme properties to installed theme properties.
|
296 |
-
$theme->id = $theme->slug;
|
297 |
-
$theme->screenshot = array( $theme->screenshot_url );
|
298 |
-
$theme->authorAndUri = wp_kses( $theme->author['display_name'], $themes_allowedtags );
|
299 |
-
$theme->compatibleWP = is_wp_version_compatible( $theme->requires ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName
|
300 |
-
$theme->compatiblePHP = is_php_version_compatible( $theme->requires_php ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName
|
301 |
-
|
302 |
-
if ( isset( $theme->parent ) ) {
|
303 |
-
$theme->parent = $theme->parent['slug'];
|
304 |
-
} else {
|
305 |
-
$theme->parent = false;
|
306 |
-
}
|
307 |
-
unset( $theme->slug );
|
308 |
-
unset( $theme->screenshot_url );
|
309 |
-
unset( $theme->author );
|
310 |
-
} // End foreach().
|
311 |
-
} elseif ( 'wporg' === $theme_action ) {
|
312 |
-
|
313 |
-
// Load WordPress.org themes from the .org API and normalize data to match installed theme objects.
|
314 |
-
if ( ! current_user_can( 'install_themes' ) ) {
|
315 |
-
wp_die( -1 );
|
316 |
-
}
|
317 |
-
|
318 |
-
// Arguments for all queries.
|
319 |
-
$wporg_args = array(
|
320 |
-
'per_page' => 100,
|
321 |
-
'fields' => array(
|
322 |
-
'reviews_url' => true, // Explicitly request the reviews URL to be linked from the customizer.
|
323 |
-
),
|
324 |
-
);
|
325 |
-
|
326 |
-
$args = array_merge( $wporg_args, $args );
|
327 |
-
|
328 |
-
if ( '' === $args['search'] && '' === $args['tag'] ) {
|
329 |
-
$args['browse'] = 'new'; // Sort by latest themes by default.
|
330 |
-
}
|
331 |
-
|
332 |
-
// Load themes from the .org API.
|
333 |
-
$themes = themes_api( 'query_themes', $args );
|
334 |
-
if ( is_wp_error( $themes ) ) {
|
335 |
-
wp_send_json_error();
|
336 |
-
}
|
337 |
-
|
338 |
-
// This list matches the allowed tags in wp-admin/includes/theme-install.php.
|
339 |
-
$themes_allowedtags = array_fill_keys(
|
340 |
-
array( 'a', 'abbr', 'acronym', 'code', 'pre', 'em', 'strong', 'div', 'p', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img' ),
|
341 |
-
array()
|
342 |
-
);
|
343 |
-
$themes_allowedtags['a'] = array_fill_keys( array( 'href', 'title', 'target' ), true );
|
344 |
-
$themes_allowedtags['acronym']['title'] = true;
|
345 |
-
$themes_allowedtags['abbr']['title'] = true;
|
346 |
-
$themes_allowedtags['img'] = array_fill_keys( array( 'src', 'class', 'alt' ), true );
|
347 |
-
|
348 |
-
// Prepare a list of installed themes to check against before the loop.
|
349 |
-
$installed_themes = array();
|
350 |
-
$wp_themes = wp_get_themes();
|
351 |
-
foreach ( $wp_themes as $theme ) {
|
352 |
-
$installed_themes[] = $theme->get_stylesheet();
|
353 |
-
}
|
354 |
-
$update_php = network_admin_url( 'update.php?action=install-theme' );
|
355 |
-
|
356 |
-
// Set up properties for themes available on WordPress.org.
|
357 |
-
foreach ( $themes->themes as &$theme ) {
|
358 |
-
$theme->install_url = add_query_arg(
|
359 |
-
array(
|
360 |
-
'theme' => $theme->slug,
|
361 |
-
'_wpnonce' => wp_create_nonce( 'install-theme_' . $theme->slug ),
|
362 |
-
),
|
363 |
-
$update_php
|
364 |
-
);
|
365 |
-
|
366 |
-
$theme->name = wp_kses( $theme->name, $themes_allowedtags );
|
367 |
-
$theme->version = wp_kses( $theme->version, $themes_allowedtags );
|
368 |
-
$theme->description = wp_kses( $theme->description, $themes_allowedtags );
|
369 |
-
$theme->stars = wp_star_rating(
|
370 |
-
array(
|
371 |
-
'rating' => $theme->rating,
|
372 |
-
'type' => 'percent',
|
373 |
-
'number' => $theme->num_ratings,
|
374 |
-
'echo' => false,
|
375 |
-
)
|
376 |
-
);
|
377 |
-
$theme->num_ratings = number_format_i18n( $theme->num_ratings );
|
378 |
-
$theme->preview_url = set_url_scheme( $theme->preview_url );
|
379 |
-
|
380 |
-
// Handle themes that are already installed as installed themes.
|
381 |
-
if ( in_array( $theme->slug, $installed_themes, true ) ) {
|
382 |
-
$theme->type = 'installed';
|
383 |
-
} else {
|
384 |
-
$theme->type = $theme_action;
|
385 |
-
}
|
386 |
-
|
387 |
-
// Set active based on customized theme.
|
388 |
-
$theme->active = ( isset( $_POST['customized_theme'] ) && $_POST['customized_theme'] === $theme->slug );
|
389 |
-
|
390 |
-
// Map available theme properties to installed theme properties.
|
391 |
-
$theme->id = $theme->slug;
|
392 |
-
$theme->screenshot = array( $theme->screenshot_url );
|
393 |
-
$theme->authorAndUri = wp_kses( $theme->author['display_name'], $themes_allowedtags );
|
394 |
-
$theme->compatibleWP = is_wp_version_compatible( $theme->requires ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName
|
395 |
-
$theme->compatiblePHP = is_php_version_compatible( $theme->requires_php ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName
|
396 |
-
|
397 |
-
if ( isset( $theme->parent ) ) {
|
398 |
-
$theme->parent = $theme->parent['slug'];
|
399 |
-
} else {
|
400 |
-
$theme->parent = false;
|
401 |
-
}
|
402 |
-
unset( $theme->slug );
|
403 |
-
unset( $theme->screenshot_url );
|
404 |
-
unset( $theme->author );
|
405 |
-
} // End foreach().
|
406 |
-
} // End if().
|
407 |
-
|
408 |
-
/**
|
409 |
-
* Filters the theme data loaded in the customizer.
|
410 |
-
*
|
411 |
-
* This allows theme data to be loading from an external source,
|
412 |
-
* or modification of data loaded from `wp_prepare_themes_for_js()`
|
413 |
-
* or WordPress.org via `themes_api()`.
|
414 |
-
*
|
415 |
-
* @since 4.9.0
|
416 |
-
*
|
417 |
-
* @see wp_prepare_themes_for_js()
|
418 |
-
* @see themes_api()
|
419 |
-
* @see WP_Customize_Manager::__construct()
|
420 |
-
*
|
421 |
-
* @param array $themes Nested array of theme data.
|
422 |
-
* @param array $args List of arguments, such as page, search term, and tags to query for.
|
423 |
-
* @param WP_Customize_Manager $manager Instance of Customize manager.
|
424 |
-
*/
|
425 |
-
$themes = apply_filters( 'customize_load_themes', $themes, $args, $wp_customize );
|
426 |
-
|
427 |
-
wp_send_json_success( $themes );
|
428 |
-
}
|
429 |
-
|
430 |
-
/* Plugins */
|
431 |
-
/* Adds Catch Plugins tab in Add Plugin page to show all plugins by Catch Plugins in wordpress.org */
|
432 |
-
public function add_our_plugins_tab( $tabs ) {
|
433 |
-
// Add our filter here
|
434 |
-
$tabs['catchplugins'] = _x( 'Catch Plugins', 'Plugin Installer' );
|
435 |
-
|
436 |
-
return $tabs;
|
437 |
-
}
|
438 |
-
|
439 |
-
public function catchplugins() {
|
440 |
-
/* From CORE Start */
|
441 |
-
global $paged, $tab;
|
442 |
-
wp_reset_vars( array( 'tab' ) );
|
443 |
-
|
444 |
-
$defined_class = new WP_Plugin_Install_List_Table();
|
445 |
-
$paged = $defined_class->get_pagenum();
|
446 |
-
|
447 |
-
$per_page = 30;
|
448 |
-
//$installed_plugins = catch_get_installed_plugins();
|
449 |
-
|
450 |
-
$args = array(
|
451 |
-
'page' => $paged,
|
452 |
-
'per_page' => $per_page,
|
453 |
-
'fields' => array(
|
454 |
-
'last_updated' => true,
|
455 |
-
'icons' => true,
|
456 |
-
'active_installs' => true,
|
457 |
-
),
|
458 |
-
// Send the locale and installed plugin slugs to the API so it can provide context-sensitive results.
|
459 |
-
'locale' => get_user_locale(),
|
460 |
-
//'installed_plugins' => array_keys( $installed_plugins ),
|
461 |
-
);
|
462 |
-
/* From CORE End */
|
463 |
-
|
464 |
-
// Add author filter for our plugins
|
465 |
-
$args['author'] = 'catchplugins';
|
466 |
-
|
467 |
-
return $args;
|
468 |
-
}
|
469 |
-
|
470 |
-
public function plugins_table() {
|
471 |
-
global $wp_list_table;
|
472 |
-
printf(
|
473 |
-
'<p class="catch-plugins-list">' . __( 'You can use any of our free plugins or premium plugins from <a href="%s" target="_blank">Catch Plugins</a>' ) . '.</p>',
|
474 |
-
'https://catchplugins.com/'
|
475 |
-
);
|
476 |
-
?>
|
477 |
-
<form id="plugin-filter" method="post">
|
478 |
-
<?php $wp_list_table->display(); ?>
|
479 |
-
</form>
|
480 |
-
<?php
|
481 |
-
}
|
482 |
-
}
|
483 |
-
|
484 |
-
$catchthemes_theme_plugin = new CatchThemesThemePlugin();
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class CatchThemesThemePlugin {
|
4 |
+
public function __construct() {
|
5 |
+
remove_action( 'wp_ajax_query-themes', array( $this, 'wp_ajax_query_themes' ), 1 );
|
6 |
+
add_action( 'wp_ajax_query-themes', array( $this, 'wp_ajax_custom_query_themes' ), 1 );
|
7 |
+
|
8 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'our_themes_script' ) );
|
9 |
+
|
10 |
+
if ( ! is_multisite() ) {
|
11 |
+
add_action( 'customize_register', array( $this, 'customize_register' ) );
|
12 |
+
}
|
13 |
+
|
14 |
+
global $wp_customize;
|
15 |
+
remove_action( 'wp_ajax_customize_load_themes', array( $wp_customize, 'handle_load_themes_request' ) );
|
16 |
+
add_action( 'wp_ajax_customize_load_themes', array( $this, 'handle_load_themes_request' ) );
|
17 |
+
|
18 |
+
add_filter( 'install_plugins_tabs', array( $this, 'add_our_plugins_tab' ), 1 );
|
19 |
+
add_filter( 'install_plugins_table_api_args_catchplugins', array( $this, 'catchplugins' ), 1 );
|
20 |
+
add_action( 'install_plugins_catchplugins', array( $this, 'plugins_table' ) );
|
21 |
+
}
|
22 |
+
|
23 |
+
/* Adds Catch Themes tab in Add Theme page to show all themes by Catch Themes in wordpress.org
|
24 |
+
* taken from wp-admin/includes/ajax-action.php wp_ajax_query_themes().
|
25 |
+
* Ajax handler for getting themes from themes_api().
|
26 |
+
*
|
27 |
+
* @since 3.9.0
|
28 |
+
*
|
29 |
+
* @global array $themes_allowedtags
|
30 |
+
* @global array $theme_field_defaults
|
31 |
+
*/
|
32 |
+
public function wp_ajax_custom_query_themes() {
|
33 |
+
global $themes_allowedtags, $theme_field_defaults;
|
34 |
+
|
35 |
+
if ( ! current_user_can( 'install_themes' ) ) {
|
36 |
+
wp_send_json_error();
|
37 |
+
}
|
38 |
+
|
39 |
+
$args = wp_parse_args(
|
40 |
+
wp_unslash( $_REQUEST['request'] ),
|
41 |
+
array(
|
42 |
+
'per_page' => 20,
|
43 |
+
'fields' => array_merge(
|
44 |
+
(array) $theme_field_defaults,
|
45 |
+
array(
|
46 |
+
'reviews_url' => true, // Explicitly request the reviews URL to be linked from the Add Themes screen.
|
47 |
+
)
|
48 |
+
),
|
49 |
+
)
|
50 |
+
);
|
51 |
+
|
52 |
+
if ( isset( $args['browse'] ) && 'catchthemes' === $args['browse'] && ! isset( $args['user'] ) ) {
|
53 |
+
$args['author'] = 'catchthemes';
|
54 |
+
unset( $args['browse'] );
|
55 |
+
}
|
56 |
+
|
57 |
+
if ( isset( $args['browse'] ) && 'favorites' === $args['browse'] && ! isset( $args['user'] ) ) {
|
58 |
+
$user = get_user_option( 'wporg_favorites' );
|
59 |
+
if ( $user ) {
|
60 |
+
$args['user'] = $user;
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
$old_filter = isset( $args['browse'] ) ? $args['browse'] : 'search';
|
65 |
+
|
66 |
+
/** This filter is documented in wp-admin/includes/class-wp-theme-install-list-table.php */
|
67 |
+
$args = apply_filters( 'install_themes_table_api_args_' . $old_filter, $args );
|
68 |
+
|
69 |
+
$api = themes_api( 'query_themes', $args );
|
70 |
+
|
71 |
+
if ( is_wp_error( $api ) ) {
|
72 |
+
wp_send_json_error();
|
73 |
+
}
|
74 |
+
|
75 |
+
$update_php = network_admin_url( 'update.php?action=install-theme' );
|
76 |
+
foreach ( $api->themes as &$theme ) {
|
77 |
+
$theme->install_url = add_query_arg(
|
78 |
+
array(
|
79 |
+
'theme' => $theme->slug,
|
80 |
+
'_wpnonce' => wp_create_nonce( 'install-theme_' . $theme->slug ),
|
81 |
+
),
|
82 |
+
$update_php
|
83 |
+
);
|
84 |
+
|
85 |
+
if ( current_user_can( 'switch_themes' ) ) {
|
86 |
+
if ( is_multisite() ) {
|
87 |
+
$theme->activate_url = add_query_arg(
|
88 |
+
array(
|
89 |
+
'action' => 'enable',
|
90 |
+
'_wpnonce' => wp_create_nonce( 'enable-theme_' . $theme->slug ),
|
91 |
+
'theme' => $theme->slug,
|
92 |
+
),
|
93 |
+
network_admin_url( 'themes.php' )
|
94 |
+
);
|
95 |
+
} else {
|
96 |
+
$theme->activate_url = add_query_arg(
|
97 |
+
array(
|
98 |
+
'action' => 'activate',
|
99 |
+
'_wpnonce' => wp_create_nonce( 'switch-theme_' . $theme->slug ),
|
100 |
+
'stylesheet' => $theme->slug,
|
101 |
+
),
|
102 |
+
admin_url( 'themes.php' )
|
103 |
+
);
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
if ( ! is_multisite() && current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) {
|
108 |
+
$theme->customize_url = add_query_arg(
|
109 |
+
array(
|
110 |
+
'return' => urlencode( network_admin_url( 'theme-install.php', 'relative' ) ),
|
111 |
+
),
|
112 |
+
wp_customize_url( $theme->slug )
|
113 |
+
);
|
114 |
+
}
|
115 |
+
|
116 |
+
$theme->name = wp_kses( $theme->name, $themes_allowedtags );
|
117 |
+
$theme->author = wp_kses( $theme->author['display_name'], $themes_allowedtags );
|
118 |
+
$theme->version = wp_kses( $theme->version, $themes_allowedtags );
|
119 |
+
$theme->description = wp_kses( $theme->description, $themes_allowedtags );
|
120 |
+
|
121 |
+
$theme->stars = wp_star_rating(
|
122 |
+
array(
|
123 |
+
'rating' => $theme->rating,
|
124 |
+
'type' => 'percent',
|
125 |
+
'number' => $theme->num_ratings,
|
126 |
+
'echo' => false,
|
127 |
+
)
|
128 |
+
);
|
129 |
+
|
130 |
+
$theme->num_ratings = number_format_i18n( $theme->num_ratings );
|
131 |
+
$theme->preview_url = set_url_scheme( $theme->preview_url );
|
132 |
+
$theme->compatible_wp = is_wp_version_compatible( $theme->requires );
|
133 |
+
$theme->compatible_php = is_php_version_compatible( $theme->requires_php );
|
134 |
+
|
135 |
+
}
|
136 |
+
|
137 |
+
wp_send_json_success( $api );
|
138 |
+
}
|
139 |
+
|
140 |
+
public function our_themes_script( $hook_suffix ) {
|
141 |
+
|
142 |
+
if ( 'theme-install.php' === $hook_suffix ) {
|
143 |
+
wp_enqueue_script( 'our-themes-script', plugin_dir_url( __FILE__ ) . '../js/our-themes.js', array( 'jquery' ), '2018-05-16' );
|
144 |
+
}
|
145 |
+
}
|
146 |
+
|
147 |
+
/* Add Catch Themes Section in Theme in Customizer */
|
148 |
+
public function customize_register( $wp_customize ) {
|
149 |
+
$wp_customize->add_section(
|
150 |
+
new WP_Customize_Themes_Section(
|
151 |
+
$wp_customize,
|
152 |
+
'catchthemes',
|
153 |
+
array(
|
154 |
+
'title' => __( 'Themes by CatchThemes', 'catch-themes-demo-import' ),
|
155 |
+
'action' => 'catchthemes',
|
156 |
+
'capability' => 'install_themes',
|
157 |
+
'panel' => 'themes',
|
158 |
+
'priority' => 6,
|
159 |
+
)
|
160 |
+
)
|
161 |
+
);
|
162 |
+
}
|
163 |
+
|
164 |
+
|
165 |
+
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Load themes into the theme browsing/installation UI.
|
169 |
+
* taken from wp-includes/cllass-wp-customize-manager.php
|
170 |
+
* @since 4.9.0
|
171 |
+
*/
|
172 |
+
public function handle_load_themes_request() {
|
173 |
+
check_ajax_referer( 'switch_themes', 'nonce' );
|
174 |
+
if ( ! current_user_can( 'switch_themes' ) ) {
|
175 |
+
wp_die( -1 );
|
176 |
+
}
|
177 |
+
|
178 |
+
if ( empty( $_POST['theme_action'] ) ) {
|
179 |
+
wp_send_json_error( 'missing_theme_action' );
|
180 |
+
}
|
181 |
+
$theme_action = sanitize_key( $_POST['theme_action'] );
|
182 |
+
$themes = array();
|
183 |
+
$args = array();
|
184 |
+
|
185 |
+
// Define query filters based on user input.
|
186 |
+
if ( ! array_key_exists( 'search', $_POST ) ) {
|
187 |
+
$args['search'] = '';
|
188 |
+
} else {
|
189 |
+
$args['search'] = sanitize_text_field( wp_unslash( $_POST['search'] ) );
|
190 |
+
}
|
191 |
+
|
192 |
+
if ( ! array_key_exists( 'tags', $_POST ) ) {
|
193 |
+
$args['tag'] = '';
|
194 |
+
} else {
|
195 |
+
$args['tag'] = array_map( 'sanitize_text_field', wp_unslash( (array) $_POST['tags'] ) );
|
196 |
+
}
|
197 |
+
|
198 |
+
if ( ! array_key_exists( 'page', $_POST ) ) {
|
199 |
+
$args['page'] = 1;
|
200 |
+
} else {
|
201 |
+
$args['page'] = absint( $_POST['page'] );
|
202 |
+
}
|
203 |
+
|
204 |
+
require_once ABSPATH . 'wp-admin/includes/theme.php';
|
205 |
+
|
206 |
+
if ( 'installed' === $theme_action ) {
|
207 |
+
|
208 |
+
// Load all installed themes from wp_prepare_themes_for_js().
|
209 |
+
$themes = array( 'themes' => wp_prepare_themes_for_js() );
|
210 |
+
foreach ( $themes['themes'] as &$theme ) {
|
211 |
+
$theme['type'] = 'installed';
|
212 |
+
$theme['active'] = ( isset( $_POST['customized_theme'] ) && $_POST['customized_theme'] === $theme['id'] );
|
213 |
+
}
|
214 |
+
} elseif ( 'catchthemes' === $theme_action ) {
|
215 |
+
|
216 |
+
// Load WordPress.org themes from the .org API and normalize data to match installed theme objects.
|
217 |
+
if ( ! current_user_can( 'install_themes' ) ) {
|
218 |
+
wp_die( -1 );
|
219 |
+
}
|
220 |
+
|
221 |
+
// Arguments for all queries.
|
222 |
+
$wporg_args = array(
|
223 |
+
'per_page' => 100,
|
224 |
+
'fields' => array(
|
225 |
+
'reviews_url' => true, // Explicitly request the reviews URL to be linked from the customizer.
|
226 |
+
),
|
227 |
+
);
|
228 |
+
|
229 |
+
$args = array_merge( $wporg_args, $args );
|
230 |
+
|
231 |
+
if ( '' === $args['search'] && '' === $args['tag'] ) {
|
232 |
+
$args['browse'] = 'new'; // Sort by latest themes by default.
|
233 |
+
}
|
234 |
+
|
235 |
+
$args['author'] = 'catchthemes';
|
236 |
+
|
237 |
+
// Load themes from the .org API.
|
238 |
+
$themes = themes_api( 'query_themes', $args );
|
239 |
+
if ( is_wp_error( $themes ) ) {
|
240 |
+
wp_send_json_error();
|
241 |
+
}
|
242 |
+
|
243 |
+
// This list matches the allowed tags in wp-admin/includes/theme-install.php.
|
244 |
+
$themes_allowedtags = array_fill_keys(
|
245 |
+
array( 'a', 'abbr', 'acronym', 'code', 'pre', 'em', 'strong', 'div', 'p', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img' ),
|
246 |
+
array()
|
247 |
+
);
|
248 |
+
$themes_allowedtags['a'] = array_fill_keys( array( 'href', 'title', 'target' ), true );
|
249 |
+
$themes_allowedtags['acronym']['title'] = true;
|
250 |
+
$themes_allowedtags['abbr']['title'] = true;
|
251 |
+
$themes_allowedtags['img'] = array_fill_keys( array( 'src', 'class', 'alt' ), true );
|
252 |
+
|
253 |
+
// Prepare a list of installed themes to check against before the loop.
|
254 |
+
$installed_themes = array();
|
255 |
+
$wp_themes = wp_get_themes();
|
256 |
+
foreach ( $wp_themes as $theme ) {
|
257 |
+
$installed_themes[] = $theme->get_stylesheet();
|
258 |
+
}
|
259 |
+
$update_php = network_admin_url( 'update.php?action=install-theme' );
|
260 |
+
|
261 |
+
// Set up properties for themes available on WordPress.org.
|
262 |
+
foreach ( $themes->themes as &$theme ) {
|
263 |
+
$theme->install_url = add_query_arg(
|
264 |
+
array(
|
265 |
+
'theme' => $theme->slug,
|
266 |
+
'_wpnonce' => wp_create_nonce( 'install-theme_' . $theme->slug ),
|
267 |
+
),
|
268 |
+
$update_php
|
269 |
+
);
|
270 |
+
|
271 |
+
$theme->name = wp_kses( $theme->name, $themes_allowedtags );
|
272 |
+
$theme->version = wp_kses( $theme->version, $themes_allowedtags );
|
273 |
+
$theme->description = wp_kses( $theme->description, $themes_allowedtags );
|
274 |
+
$theme->stars = wp_star_rating(
|
275 |
+
array(
|
276 |
+
'rating' => $theme->rating,
|
277 |
+
'type' => 'percent',
|
278 |
+
'number' => $theme->num_ratings,
|
279 |
+
'echo' => false,
|
280 |
+
)
|
281 |
+
);
|
282 |
+
$theme->num_ratings = number_format_i18n( $theme->num_ratings );
|
283 |
+
$theme->preview_url = set_url_scheme( $theme->preview_url );
|
284 |
+
|
285 |
+
// Handle themes that are already installed as installed themes.
|
286 |
+
if ( in_array( $theme->slug, $installed_themes, true ) ) {
|
287 |
+
$theme->type = 'installed';
|
288 |
+
} else {
|
289 |
+
$theme->type = $theme_action;
|
290 |
+
}
|
291 |
+
|
292 |
+
// Set active based on customized theme.
|
293 |
+
$theme->active = ( isset( $_POST['customized_theme'] ) && $_POST['customized_theme'] === $theme->slug );
|
294 |
+
|
295 |
+
// Map available theme properties to installed theme properties.
|
296 |
+
$theme->id = $theme->slug;
|
297 |
+
$theme->screenshot = array( $theme->screenshot_url );
|
298 |
+
$theme->authorAndUri = wp_kses( $theme->author['display_name'], $themes_allowedtags );
|
299 |
+
$theme->compatibleWP = is_wp_version_compatible( $theme->requires ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName
|
300 |
+
$theme->compatiblePHP = is_php_version_compatible( $theme->requires_php ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName
|
301 |
+
|
302 |
+
if ( isset( $theme->parent ) ) {
|
303 |
+
$theme->parent = $theme->parent['slug'];
|
304 |
+
} else {
|
305 |
+
$theme->parent = false;
|
306 |
+
}
|
307 |
+
unset( $theme->slug );
|
308 |
+
unset( $theme->screenshot_url );
|
309 |
+
unset( $theme->author );
|
310 |
+
} // End foreach().
|
311 |
+
} elseif ( 'wporg' === $theme_action ) {
|
312 |
+
|
313 |
+
// Load WordPress.org themes from the .org API and normalize data to match installed theme objects.
|
314 |
+
if ( ! current_user_can( 'install_themes' ) ) {
|
315 |
+
wp_die( -1 );
|
316 |
+
}
|
317 |
+
|
318 |
+
// Arguments for all queries.
|
319 |
+
$wporg_args = array(
|
320 |
+
'per_page' => 100,
|
321 |
+
'fields' => array(
|
322 |
+
'reviews_url' => true, // Explicitly request the reviews URL to be linked from the customizer.
|
323 |
+
),
|
324 |
+
);
|
325 |
+
|
326 |
+
$args = array_merge( $wporg_args, $args );
|
327 |
+
|
328 |
+
if ( '' === $args['search'] && '' === $args['tag'] ) {
|
329 |
+
$args['browse'] = 'new'; // Sort by latest themes by default.
|
330 |
+
}
|
331 |
+
|
332 |
+
// Load themes from the .org API.
|
333 |
+
$themes = themes_api( 'query_themes', $args );
|
334 |
+
if ( is_wp_error( $themes ) ) {
|
335 |
+
wp_send_json_error();
|
336 |
+
}
|
337 |
+
|
338 |
+
// This list matches the allowed tags in wp-admin/includes/theme-install.php.
|
339 |
+
$themes_allowedtags = array_fill_keys(
|
340 |
+
array( 'a', 'abbr', 'acronym', 'code', 'pre', 'em', 'strong', 'div', 'p', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img' ),
|
341 |
+
array()
|
342 |
+
);
|
343 |
+
$themes_allowedtags['a'] = array_fill_keys( array( 'href', 'title', 'target' ), true );
|
344 |
+
$themes_allowedtags['acronym']['title'] = true;
|
345 |
+
$themes_allowedtags['abbr']['title'] = true;
|
346 |
+
$themes_allowedtags['img'] = array_fill_keys( array( 'src', 'class', 'alt' ), true );
|
347 |
+
|
348 |
+
// Prepare a list of installed themes to check against before the loop.
|
349 |
+
$installed_themes = array();
|
350 |
+
$wp_themes = wp_get_themes();
|
351 |
+
foreach ( $wp_themes as $theme ) {
|
352 |
+
$installed_themes[] = $theme->get_stylesheet();
|
353 |
+
}
|
354 |
+
$update_php = network_admin_url( 'update.php?action=install-theme' );
|
355 |
+
|
356 |
+
// Set up properties for themes available on WordPress.org.
|
357 |
+
foreach ( $themes->themes as &$theme ) {
|
358 |
+
$theme->install_url = add_query_arg(
|
359 |
+
array(
|
360 |
+
'theme' => $theme->slug,
|
361 |
+
'_wpnonce' => wp_create_nonce( 'install-theme_' . $theme->slug ),
|
362 |
+
),
|
363 |
+
$update_php
|
364 |
+
);
|
365 |
+
|
366 |
+
$theme->name = wp_kses( $theme->name, $themes_allowedtags );
|
367 |
+
$theme->version = wp_kses( $theme->version, $themes_allowedtags );
|
368 |
+
$theme->description = wp_kses( $theme->description, $themes_allowedtags );
|
369 |
+
$theme->stars = wp_star_rating(
|
370 |
+
array(
|
371 |
+
'rating' => $theme->rating,
|
372 |
+
'type' => 'percent',
|
373 |
+
'number' => $theme->num_ratings,
|
374 |
+
'echo' => false,
|
375 |
+
)
|
376 |
+
);
|
377 |
+
$theme->num_ratings = number_format_i18n( $theme->num_ratings );
|
378 |
+
$theme->preview_url = set_url_scheme( $theme->preview_url );
|
379 |
+
|
380 |
+
// Handle themes that are already installed as installed themes.
|
381 |
+
if ( in_array( $theme->slug, $installed_themes, true ) ) {
|
382 |
+
$theme->type = 'installed';
|
383 |
+
} else {
|
384 |
+
$theme->type = $theme_action;
|
385 |
+
}
|
386 |
+
|
387 |
+
// Set active based on customized theme.
|
388 |
+
$theme->active = ( isset( $_POST['customized_theme'] ) && $_POST['customized_theme'] === $theme->slug );
|
389 |
+
|
390 |
+
// Map available theme properties to installed theme properties.
|
391 |
+
$theme->id = $theme->slug;
|
392 |
+
$theme->screenshot = array( $theme->screenshot_url );
|
393 |
+
$theme->authorAndUri = wp_kses( $theme->author['display_name'], $themes_allowedtags );
|
394 |
+
$theme->compatibleWP = is_wp_version_compatible( $theme->requires ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName
|
395 |
+
$theme->compatiblePHP = is_php_version_compatible( $theme->requires_php ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName
|
396 |
+
|
397 |
+
if ( isset( $theme->parent ) ) {
|
398 |
+
$theme->parent = $theme->parent['slug'];
|
399 |
+
} else {
|
400 |
+
$theme->parent = false;
|
401 |
+
}
|
402 |
+
unset( $theme->slug );
|
403 |
+
unset( $theme->screenshot_url );
|
404 |
+
unset( $theme->author );
|
405 |
+
} // End foreach().
|
406 |
+
} // End if().
|
407 |
+
|
408 |
+
/**
|
409 |
+
* Filters the theme data loaded in the customizer.
|
410 |
+
*
|
411 |
+
* This allows theme data to be loading from an external source,
|
412 |
+
* or modification of data loaded from `wp_prepare_themes_for_js()`
|
413 |
+
* or WordPress.org via `themes_api()`.
|
414 |
+
*
|
415 |
+
* @since 4.9.0
|
416 |
+
*
|
417 |
+
* @see wp_prepare_themes_for_js()
|
418 |
+
* @see themes_api()
|
419 |
+
* @see WP_Customize_Manager::__construct()
|
420 |
+
*
|
421 |
+
* @param array $themes Nested array of theme data.
|
422 |
+
* @param array $args List of arguments, such as page, search term, and tags to query for.
|
423 |
+
* @param WP_Customize_Manager $manager Instance of Customize manager.
|
424 |
+
*/
|
425 |
+
$themes = apply_filters( 'customize_load_themes', $themes, $args, $wp_customize );
|
426 |
+
|
427 |
+
wp_send_json_success( $themes );
|
428 |
+
}
|
429 |
+
|
430 |
+
/* Plugins */
|
431 |
+
/* Adds Catch Plugins tab in Add Plugin page to show all plugins by Catch Plugins in wordpress.org */
|
432 |
+
public function add_our_plugins_tab( $tabs ) {
|
433 |
+
// Add our filter here
|
434 |
+
$tabs['catchplugins'] = _x( 'Catch Plugins', 'Plugin Installer' );
|
435 |
+
|
436 |
+
return $tabs;
|
437 |
+
}
|
438 |
+
|
439 |
+
public function catchplugins() {
|
440 |
+
/* From CORE Start */
|
441 |
+
global $paged, $tab;
|
442 |
+
wp_reset_vars( array( 'tab' ) );
|
443 |
+
|
444 |
+
$defined_class = new WP_Plugin_Install_List_Table();
|
445 |
+
$paged = $defined_class->get_pagenum();
|
446 |
+
|
447 |
+
$per_page = 30;
|
448 |
+
//$installed_plugins = catch_get_installed_plugins();
|
449 |
+
|
450 |
+
$args = array(
|
451 |
+
'page' => $paged,
|
452 |
+
'per_page' => $per_page,
|
453 |
+
'fields' => array(
|
454 |
+
'last_updated' => true,
|
455 |
+
'icons' => true,
|
456 |
+
'active_installs' => true,
|
457 |
+
),
|
458 |
+
// Send the locale and installed plugin slugs to the API so it can provide context-sensitive results.
|
459 |
+
'locale' => get_user_locale(),
|
460 |
+
//'installed_plugins' => array_keys( $installed_plugins ),
|
461 |
+
);
|
462 |
+
/* From CORE End */
|
463 |
+
|
464 |
+
// Add author filter for our plugins
|
465 |
+
$args['author'] = 'catchplugins';
|
466 |
+
|
467 |
+
return $args;
|
468 |
+
}
|
469 |
+
|
470 |
+
public function plugins_table() {
|
471 |
+
global $wp_list_table;
|
472 |
+
printf(
|
473 |
+
'<p class="catch-plugins-list">' . __( 'You can use any of our free plugins or premium plugins from <a href="%s" target="_blank">Catch Plugins</a>' ) . '.</p>',
|
474 |
+
'https://catchplugins.com/'
|
475 |
+
);
|
476 |
+
?>
|
477 |
+
<form id="plugin-filter" method="post">
|
478 |
+
<?php $wp_list_table->display(); ?>
|
479 |
+
</form>
|
480 |
+
<?php
|
481 |
+
}
|
482 |
+
}
|
483 |
+
|
484 |
+
$catchthemes_theme_plugin = new CatchThemesThemePlugin();
|
languages/catch-ids.pot
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
# Copyright (C) 2018 Catch Plugins
|
2 |
# This file is distributed under the GNU General Public License v3 or later.
|
3 |
#, fuzzy
|
4 |
msgid ""
|
5 |
msgstr ""
|
6 |
"Project-Id-Version: Catch Ids\n"
|
7 |
"Report-Msgid-Bugs-To: https://wordpress.org/tags/catch-ids\n"
|
8 |
-
"POT-Creation-Date:
|
9 |
"PO-Revision-Date: 2016-12-07 22:52-0500\n"
|
10 |
"Last-Translator: Pratik Shrestha <pratik@catchplugins.com>\n"
|
11 |
"Language-Team: Catch Plugins <info@catchplugins.com>\n"
|
@@ -14,7 +14,7 @@ msgstr ""
|
|
14 |
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
"Content-Transfer-Encoding: 8bit\n"
|
16 |
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
17 |
-
"X-Generator: Poedit 2.4.
|
18 |
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;esc_attr_e;esc_attr__;_nx;"
|
19 |
"esc_html__\n"
|
20 |
"X-Poedit-Basepath: .\n"
|
1 |
+
# Copyright (C) 2018-2021 Catch Plugins
|
2 |
# This file is distributed under the GNU General Public License v3 or later.
|
3 |
#, fuzzy
|
4 |
msgid ""
|
5 |
msgstr ""
|
6 |
"Project-Id-Version: Catch Ids\n"
|
7 |
"Report-Msgid-Bugs-To: https://wordpress.org/tags/catch-ids\n"
|
8 |
+
"POT-Creation-Date: 2021-03-04 13:29-0800\n"
|
9 |
"PO-Revision-Date: 2016-12-07 22:52-0500\n"
|
10 |
"Last-Translator: Pratik Shrestha <pratik@catchplugins.com>\n"
|
11 |
"Language-Team: Catch Plugins <info@catchplugins.com>\n"
|
14 |
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
"Content-Transfer-Encoding: 8bit\n"
|
16 |
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
17 |
+
"X-Generator: Poedit 2.4.2\n"
|
18 |
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;esc_attr_e;esc_attr__;_nx;"
|
19 |
"esc_html__\n"
|
20 |
"X-Poedit-Basepath: .\n"
|
readme.txt
CHANGED
@@ -1,138 +1,141 @@
|
|
1 |
-
=== Catch IDs ===
|
2 |
-
Contributors: catchplugins, catchthemes, sakinshrestha, pratikshrestha, maheshmaharjan, dreamsapana
|
3 |
-
Donate link: https://catchplugins.com/plugins/catch-ids/
|
4 |
-
Tags: catch-ids, simple, admin, wp-admin, show, ids, post, page, category, media, links, tag, user, id, post id, page id, category id, tag id, media id
|
5 |
-
Requires at least: 4.5
|
6 |
-
Tested up to: 5.
|
7 |
-
Stable tag: trunk
|
8 |
-
License: GNU General Public License, version 3 (GPLv3)
|
9 |
-
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
10 |
-
|
11 |
-
What this plugin does is to shows the IDs on admin section.
|
12 |
-
|
13 |
-
== Description ==
|
14 |
-
|
15 |
-
Catch IDs is a simple and light weight plugin to show the Post ID, Page ID, Media ID, Links ID, Category ID, Tag ID and User ID in the Admin Section Table. This plugin was initially develop to support our themes features slider. Then we thought that this will be helpful to all the WordPress Admin Users. Just activate and catch IDs in your page, post, category, tag and media pages.
|
16 |
-
|
17 |
-
Check out our new modular plugin [Catch Web Tools](https://wordpress.org/plugins/catch-web-tools/). Power up your WordPress site with powerful features that were till now only available to Catch Themes users. We currently offer Webmaster Tools, Open Graph, Custom CSS, Social Icons, Catch IDs and basic SEO Optimization modules and will be adding more.
|
18 |
-
|
19 |
-
|
20 |
-
== Installation ==
|
21 |
-
|
22 |
-
The easy way (via Dashboard) :
|
23 |
-
|
24 |
-
* Go to Plugins > Add New
|
25 |
-
* Type in the **Catch IDs** in Search Plugins box
|
26 |
-
* Click Install Now to install the plugin
|
27 |
-
* After Installation click activate to start using the **Catch IDs**
|
28 |
-
* Go to **Catch IDs** from Dashboard menu
|
29 |
-
* Now you will get ID's column in your post, page, category, tag and media panel
|
30 |
-
|
31 |
-
Not so easy way (via FTP) :
|
32 |
-
|
33 |
-
* Download the **Catch IDs**
|
34 |
-
* Unarchive **Catch IDs** plugin
|
35 |
-
* Copy folder with catch-ids.zip
|
36 |
-
* Open the ftp \wp-content\plugins\
|
37 |
-
* Paste the plug-ins folder in the folder
|
38 |
-
* Go to admin panel => open item "Plugins" => activate **Catch IDs**
|
39 |
-
* Go to **Catch IDs** from Dashboard menu
|
40 |
-
|
41 |
-
== Screenshots ==
|
42 |
-
|
43 |
-
1. Edit Posts Page
|
44 |
-
2. Edit Media Library
|
45 |
-
3. Edit Categories
|
46 |
-
|
47 |
-
== Usage ==
|
48 |
-
|
49 |
-
1. Just install and activate.
|
50 |
-
|
51 |
-
|
52 |
-
== Changelog ==
|
53 |
-
= 2.
|
54 |
-
*
|
55 |
-
|
56 |
-
= 2.
|
57 |
-
*
|
58 |
-
|
59 |
-
=
|
60 |
-
* Compatibility check up to version 5.
|
61 |
-
|
62 |
-
= 1.
|
63 |
-
*
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
*
|
69 |
-
|
70 |
-
= 1.
|
71 |
-
*
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
*
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
* Compatibility check up to version 4.9.
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
*
|
85 |
-
|
86 |
-
= 1.4.
|
87 |
-
* Compatibility check up to version 4.
|
88 |
-
|
89 |
-
= 1.4.
|
90 |
-
* Compatibility check up to version 4.
|
91 |
-
|
92 |
-
= 1.4.
|
93 |
-
*
|
94 |
-
|
95 |
-
= 1.4.
|
96 |
-
*
|
97 |
-
|
98 |
-
= 1.4.
|
99 |
-
* Compatibility check up to version 4.
|
100 |
-
|
101 |
-
= 1.4.
|
102 |
-
*
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
*
|
107 |
-
|
108 |
-
= 1.
|
109 |
-
*
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
*
|
114 |
-
|
115 |
-
= 1.2.
|
116 |
-
*
|
117 |
-
|
118 |
-
= 1.2.
|
119 |
-
*
|
120 |
-
|
121 |
-
= 1.2.
|
122 |
-
* Compatibility check up to version 4.
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
*
|
127 |
-
|
128 |
-
= 1.2.
|
129 |
-
*
|
130 |
-
|
131 |
-
= 1.2
|
132 |
-
*
|
133 |
-
|
134 |
-
= 1.
|
135 |
-
* Check WordPress compatibility up to version 3.
|
136 |
-
|
137 |
-
= 1.
|
138 |
-
*
|
|
|
|
|
|
1 |
+
=== Catch IDs ===
|
2 |
+
Contributors: catchplugins, catchthemes, sakinshrestha, pratikshrestha, maheshmaharjan, dreamsapana
|
3 |
+
Donate link: https://catchplugins.com/plugins/catch-ids/
|
4 |
+
Tags: catch-ids, simple, admin, wp-admin, show, ids, post, page, category, media, links, tag, user, id, post id, page id, category id, tag id, media id
|
5 |
+
Requires at least: 4.5
|
6 |
+
Tested up to: 5.7
|
7 |
+
Stable tag: trunk
|
8 |
+
License: GNU General Public License, version 3 (GPLv3)
|
9 |
+
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
10 |
+
|
11 |
+
What this plugin does is to shows the IDs on admin section.
|
12 |
+
|
13 |
+
== Description ==
|
14 |
+
|
15 |
+
Catch IDs is a simple and light weight plugin to show the Post ID, Page ID, Media ID, Links ID, Category ID, Tag ID and User ID in the Admin Section Table. This plugin was initially develop to support our themes features slider. Then we thought that this will be helpful to all the WordPress Admin Users. Just activate and catch IDs in your page, post, category, tag and media pages.
|
16 |
+
|
17 |
+
Check out our new modular plugin [Catch Web Tools](https://wordpress.org/plugins/catch-web-tools/). Power up your WordPress site with powerful features that were till now only available to Catch Themes users. We currently offer Webmaster Tools, Open Graph, Custom CSS, Social Icons, Catch IDs and basic SEO Optimization modules and will be adding more.
|
18 |
+
|
19 |
+
|
20 |
+
== Installation ==
|
21 |
+
|
22 |
+
The easy way (via Dashboard) :
|
23 |
+
|
24 |
+
* Go to Plugins > Add New
|
25 |
+
* Type in the **Catch IDs** in Search Plugins box
|
26 |
+
* Click Install Now to install the plugin
|
27 |
+
* After Installation click activate to start using the **Catch IDs**
|
28 |
+
* Go to **Catch IDs** from Dashboard menu
|
29 |
+
* Now you will get ID's column in your post, page, category, tag and media panel
|
30 |
+
|
31 |
+
Not so easy way (via FTP) :
|
32 |
+
|
33 |
+
* Download the **Catch IDs**
|
34 |
+
* Unarchive **Catch IDs** plugin
|
35 |
+
* Copy folder with catch-ids.zip
|
36 |
+
* Open the ftp \wp-content\plugins\
|
37 |
+
* Paste the plug-ins folder in the folder
|
38 |
+
* Go to admin panel => open item "Plugins" => activate **Catch IDs**
|
39 |
+
* Go to **Catch IDs** from Dashboard menu
|
40 |
+
|
41 |
+
== Screenshots ==
|
42 |
+
|
43 |
+
1. Edit Posts Page
|
44 |
+
2. Edit Media Library
|
45 |
+
3. Edit Categories
|
46 |
+
|
47 |
+
== Usage ==
|
48 |
+
|
49 |
+
1. Just install and activate.
|
50 |
+
|
51 |
+
|
52 |
+
== Changelog ==
|
53 |
+
= 2.2 (Released: March 04, 2021) =
|
54 |
+
* Compatibility check up to version 5.7
|
55 |
+
|
56 |
+
= 2.1 (Released: Aug 19, 2020) =
|
57 |
+
* Bug Fixed: Issue in add new theme page
|
58 |
+
|
59 |
+
= 2.0 (Released: March 10, 2020) =
|
60 |
+
* Compatibility check up to version 5.4
|
61 |
+
|
62 |
+
= 1.9 (Released: November 12, 2019) =
|
63 |
+
* Compatibility check up to version 5.3
|
64 |
+
|
65 |
+
= 1.8 (Released: May 31, 2019) =
|
66 |
+
* Added: Option to turn off Catch Themes and Catch Plugin tabs
|
67 |
+
* Updated: Compatibility to WordPress version 5.2
|
68 |
+
* Updated: Catch Themes and Catch Plugins tabs displaying code
|
69 |
+
|
70 |
+
= 1.7 (Released: February 21, 2019) =
|
71 |
+
* Compatibility check up to version 5.1
|
72 |
+
|
73 |
+
= 1.6 (Released: December 12, 2018) =
|
74 |
+
* Added: Catch Themes and Catch Plugins tabs in Add themes and Add plugins page respectively
|
75 |
+
* Added: Themes by Catch Themes section under Themes panel in customizer
|
76 |
+
* Compatibility check up to version 5.0
|
77 |
+
|
78 |
+
= 1.5 (Released: May 07, 2018) =
|
79 |
+
* Update: Moved domain from catchthemes.com to catchplugins.com
|
80 |
+
* Compatibility check up to version 4.9.5
|
81 |
+
|
82 |
+
= 1.4.8 =
|
83 |
+
* Compatibility check up to version 4.9.4
|
84 |
+
* Added: Toggle ID column option to display in selected pages
|
85 |
+
|
86 |
+
= 1.4.7 =
|
87 |
+
* Compatibility check up to version 4.9
|
88 |
+
|
89 |
+
= 1.4.6 =
|
90 |
+
* Compatibility check up to version 4.8
|
91 |
+
|
92 |
+
= 1.4.5 =
|
93 |
+
* Compatibility check up to version 4.7
|
94 |
+
|
95 |
+
= 1.4.4 =
|
96 |
+
* Fixed: ID column display issue in mobile devices
|
97 |
+
|
98 |
+
= 1.4.3 =
|
99 |
+
* Compatibility check up to version 4.6
|
100 |
+
|
101 |
+
= 1.4.2
|
102 |
+
* Compatibility check up to version 4.5
|
103 |
+
|
104 |
+
= 1.4.1
|
105 |
+
* Changed: ID column width size to support upto 8 digit ids
|
106 |
+
* Changed: http to https in links
|
107 |
+
|
108 |
+
= 1.4
|
109 |
+
* Bug Fixed: IDs not showing in category and tags page(Reported by wwkipday)
|
110 |
+
|
111 |
+
= 1.3
|
112 |
+
* Update: Made the ID column sortable
|
113 |
+
* Code Optimization
|
114 |
+
|
115 |
+
= 1.2.6
|
116 |
+
* Compatibility check up to version 4.4
|
117 |
+
|
118 |
+
= 1.2.5
|
119 |
+
* Translation ready update
|
120 |
+
|
121 |
+
= 1.2.4
|
122 |
+
* Compatibility check up to version 4.3
|
123 |
+
|
124 |
+
= 1.2.3
|
125 |
+
* Compatibility check up to version 4.1
|
126 |
+
* Added plugin icons
|
127 |
+
|
128 |
+
= 1.2.2
|
129 |
+
* Compatibility check up to version 3.9.2
|
130 |
+
|
131 |
+
= 1.2.1
|
132 |
+
* Fixed ID not showing in Taxonomies (Reported by Lesley)
|
133 |
+
|
134 |
+
= 1.2
|
135 |
+
* Check WordPress compatibility up to version 3.9.1
|
136 |
+
|
137 |
+
= 1.1
|
138 |
+
* Check WordPress compatibility up to version 3.7.1
|
139 |
+
|
140 |
+
= 1.0
|
141 |
+
* Initial Public Release
|