View difference between Paste ID: wBTVw2XG and 13N9wh39
SHOW: | | - or go back to the newest paste.
1
// This is a combination of the ajax approach by raz ohad
2
// (see https://coderwall.com/p/of7y2q)
3
// and the wp-settings.php file after 'if ( SHORTINIT ) return false;'
4
//
5
// Update 27-04-2014
6
//  Fix for WP 3.9 Support
7
8
// I'm excluding specific plugins from loading when we loop 
9
// through the plugin array returned by wp_get_active_and_valid_plugins().
10
11
//mimic the actuall admin-ajax
12
define('DOING_AJAX', true);
13
14
if (!isset( $_REQUEST['action']))
15
    die('-1');
16
17
ini_set('html_errors', 0);
18
	
19
//make sure we skip most of the loading which we might not need
20
//http://core.trac.wordpress.org/browser/branches/3.4/wp-settings.php#L99
21
define('SHORTINIT', true);
22
23
//make sure you update this line 
24
//to the relative location of the wp-load.php
25
require_once('../../../../wp-load.php');
26
 
27
//Typical headers
28
header('Content-Type: text/html');
29
send_nosniff_header();
30
//Disable caching
31
header('Cache-Control: no-cache');
32
header('Pragma: no-cache');
33
34
// from wp-settings.php after SHORTINIT
35
36
// Load the L10n library.
37
require_once( ABSPATH . WPINC . '/l10n.php' );
38
39
// Run the installer if WordPress is not installed.
40
wp_not_installed();
41
42
// Load most of WordPress.
43
require( ABSPATH . WPINC . '/class-wp-walker.php' );
44
require( ABSPATH . WPINC . '/class-wp-ajax-response.php' );
45
require( ABSPATH . WPINC . '/formatting.php' );
46
require( ABSPATH . WPINC . '/capabilities.php' );
47
require( ABSPATH . WPINC . '/query.php' );
48
require( ABSPATH . WPINC . '/date.php' );
49
require( ABSPATH . WPINC . '/theme.php' );
50
require( ABSPATH . WPINC . '/class-wp-theme.php' );
51
require( ABSPATH . WPINC . '/template.php' );
52
require( ABSPATH . WPINC . '/user.php' );
53
require( ABSPATH . WPINC . '/meta.php' );
54
require( ABSPATH . WPINC . '/general-template.php' );
55
require( ABSPATH . WPINC . '/link-template.php' );
56
require( ABSPATH . WPINC . '/author-template.php' );
57
require( ABSPATH . WPINC . '/post.php' );
58
require( ABSPATH . WPINC . '/post-template.php' );
59
require( ABSPATH . WPINC . '/revision.php' );
60
require( ABSPATH . WPINC . '/post-formats.php' );
61
require( ABSPATH . WPINC . '/post-thumbnail-template.php' );
62
require( ABSPATH . WPINC . '/category.php' );
63
require( ABSPATH . WPINC . '/category-template.php' );
64
require( ABSPATH . WPINC . '/comment.php' );
65
require( ABSPATH . WPINC . '/comment-template.php' );
66
require( ABSPATH . WPINC . '/rewrite.php' );
67
require( ABSPATH . WPINC . '/feed.php' );
68
require( ABSPATH . WPINC . '/bookmark.php' );
69
require( ABSPATH . WPINC . '/bookmark-template.php' );
70
require( ABSPATH . WPINC . '/kses.php' );
71
require( ABSPATH . WPINC . '/cron.php' );
72
require( ABSPATH . WPINC . '/deprecated.php' );
73
require( ABSPATH . WPINC . '/script-loader.php' );
74
require( ABSPATH . WPINC . '/taxonomy.php' );
75
require( ABSPATH . WPINC . '/update.php' );
76
require( ABSPATH . WPINC . '/canonical.php' );
77
require( ABSPATH . WPINC . '/shortcodes.php' );
78
require( ABSPATH . WPINC . '/class-wp-embed.php' );
79
require( ABSPATH . WPINC . '/media.php' );
80
require( ABSPATH . WPINC . '/http.php' );
81
require( ABSPATH . WPINC . '/class-http.php' );
82
require( ABSPATH . WPINC . '/widgets.php' );
83
require( ABSPATH . WPINC . '/nav-menu.php' );
84
require( ABSPATH . WPINC . '/nav-menu-template.php' );
85
require( ABSPATH . WPINC . '/admin-bar.php' );
86
87
// Load multisite-specific files.
88
if ( is_multisite() ) {
89
	require( ABSPATH . WPINC . '/ms-functions.php' );
90
	require( ABSPATH . WPINC . '/ms-default-filters.php' );
91
	require( ABSPATH . WPINC . '/ms-deprecated.php' );
92
}
93
94
// Define constants that rely on the API to obtain the default value.
95
// Define must-use plugin directory constants, which may be overridden in the sunrise.php drop-in.
96
wp_plugin_directory_constants();
97
98
$GLOBALS['wp_plugin_paths'] = array();
99
100
// Load must-use plugins.
101
foreach ( wp_get_mu_plugins() as $mu_plugin ) {
102
	include_once( $mu_plugin );
103
}
104
unset( $mu_plugin );
105
106
// Load network activated plugins.
107
if ( is_multisite() ) {
108
	foreach( wp_get_active_network_plugins() as $network_plugin ) {
109
		wp_register_plugin_realpath( $network_plugin );
110
		include_once( $network_plugin );
111
	}
112
	unset( $network_plugin );
113
}
114
115
/**
116
 * Fires once all must-use and network-activated plugins have loaded.
117
 *
118
 * @since 2.8.0
119
 */
120
do_action( 'muplugins_loaded' );
121
122
if ( is_multisite() )
123
	ms_cookie_constants(  );
124
125
// Define constants after multisite is loaded. Cookie-related constants may be overridden in ms_network_cookies().
126
wp_cookie_constants();
127
128
// Define and enforce our SSL constants
129
wp_ssl_constants();
130
131
// Create common globals.
132
require( ABSPATH . WPINC . '/vars.php' );
133
134
// Make taxonomies and posts available to plugins and themes.
135
// @plugin authors: warning: these get registered again on the init hook.
136
create_initial_taxonomies();
137
create_initial_post_types();
138
139
// Register the default theme directory root
140
register_theme_directory( get_theme_root() );
141
142
// Load active plugins...
143
//	well we don't need to load all our plugins for ajax calls
144
// as you can abstract from the loop, wp_get_active_and_valid_plugins() is the
145
// server side path to the plugin file, so just evaluate against that...eg:
146
//
147
//  [8] => /wp-content/plugins/facebook-awd/AWD_facebook.php
148
//
149
150
$ldd_plugins = array();
151
foreach ( wp_get_active_and_valid_plugins() as $plugin ) {
152
	if(strpos($plugin, 'ewww-image-optimizer') !== false)		continue;
153
	if(strpos($plugin, 'facebook-awd') !== false)			continue;
154
	if(strpos($plugin, 'instagrabber') !== false)			continue;
155
	if(strpos($plugin, 'w3-total-cache') !== false)			continue;
156
	if(strpos($plugin, 'wp-pagenavi') !== false)			continue;
157
	wp_register_plugin_realpath( $plugin );
158
	include_once( $plugin );
159
	$ldd_plugins[] = $plugin;
160
}
161
//print_r($ldd_plugins);
162
unset($ldd_plugins);
163
unset( $plugin );
164
165
// Load pluggable functions.
166
require( ABSPATH . WPINC . '/pluggable.php' );
167
require( ABSPATH . WPINC . '/pluggable-deprecated.php' );
168
169
// Set internal encoding.
170
wp_set_internal_encoding();
171
172
// Run wp_cache_postload() if object cache is enabled and the function exists.
173
if ( WP_CACHE && function_exists( 'wp_cache_postload' ) )
174
	wp_cache_postload();
175
176
/**
177
 * Fires once activated plugins have loaded.
178
 *
179
 * Pluggable functions are also available at this point in the loading order.
180
 *
181
 * @since 1.5.0
182
 */
183
do_action( 'plugins_loaded' );
184
185
// Define constants which affect functionality if not already defined.
186
wp_functionality_constants();
187
188
// Add magic quotes and set up $_REQUEST ( $_GET + $_POST )
189
wp_magic_quotes();
190
191
/**
192
 * Fires when comment cookies are sanitized.
193
 *
194
 * @since 2.0.11
195
 */
196
do_action( 'sanitize_comment_cookies' );
197-
$wp_the_query = new WP_Query();
197+
198
/**
199
 * WordPress Query object
200
 * @global object $wp_the_query
201
 * @since 2.0.0
202
 */
203
$GLOBALS['wp_the_query'] = new WP_Query();
204
205-
$wp_query = $wp_the_query;
205+
206
 * Holds the reference to @see $wp_the_query
207
 * Use this global for WordPress queries
208
 * @global object $wp_query
209
 * @since 1.5.0
210
 */
211
$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];
212
213
/**
214
 * Holds the WordPress Rewrite object for creating pretty URLs
215
 * @global object $wp_rewrite
216
 * @since 1.5.0
217
 */
218
$GLOBALS['wp_rewrite'] = new WP_Rewrite();
219-
$wp = new WP();
219+
220
/**
221
 * WordPress Object
222
 * @global object $wp
223
 * @since 2.0.0
224
 */
225
$GLOBALS['wp'] = new WP();
226
227
/**
228
 * WordPress Widget Factory Object
229
 * @global object $wp_widget_factory
230
 * @since 2.8.0
231
 */
232
$GLOBALS['wp_widget_factory'] = new WP_Widget_Factory();
233
234
/**
235
 * WordPress User Roles
236
 * @global object $wp_roles
237
 * @since 2.0.0
238
 */
239
$GLOBALS['wp_roles'] = new WP_Roles();
240
241
/**
242
 * Fires before the theme is loaded.
243
 *
244
 * @since 2.6.0
245
 */
246
do_action( 'setup_theme' );
247
248
// Define the template related constants.
249
wp_templating_constants(  );
250
251
// Load the default text localization domain.
252
load_default_textdomain();
253
254
$locale = get_locale();
255
$locale_file = WP_LANG_DIR . "/$locale.php";
256
if ( ( 0 === validate_file( $locale ) ) && is_readable( $locale_file ) )
257
	require( $locale_file );
258
unset( $locale_file );
259
260
// Pull in locale data after loading text domain.
261
require_once( ABSPATH . WPINC . '/locale.php' );
262
263
/**
264
 * WordPress Locale object for loading locale domain date and various strings.
265
 * @global object $wp_locale
266
 * @since 2.1.0
267
 */
268
$GLOBALS['wp_locale'] = new WP_Locale();
269
270
// Load the functions for the active theme, for both parent and child theme if applicable.
271
if ( ! defined( 'WP_INSTALLING' ) || 'wp-activate.php' === $pagenow ) {
272
	if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
273
		include( STYLESHEETPATH . '/functions.php' );
274
	if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
275
		include( TEMPLATEPATH . '/functions.php' );
276
}
277
278
/**
279
 * Fires after the theme is loaded.
280-
$wp->init();
280+
281
 * @since 3.0.0
282
 */
283
do_action( 'after_setup_theme' );
284
285
// Set up current user.
286
$GLOBALS['wp']->init();
287
288
/**
289
 * Fires after WordPress has finished loading but before any headers are sent.
290
 *
291
 * Most of WP is loaded at this stage, and the user is authenticated. WP continues
292
 * to load on the init hook that follows (e.g. widgets), and many plugins instantiate
293
 * themselves on it for all sorts of reasons (e.g. they need a user, a taxonomy, etc.).
294
 *
295
 * If you wish to plug an action once WP is loaded, use the wp_loaded hook below.
296
 *
297
 * @since 1.5.0
298
 */
299
do_action( 'init' );
300
301
// Check site status
302
if ( is_multisite() ) {
303
	if ( true !== ( $file = ms_site_check() ) ) {
304
		require( $file );
305
		die();
306
	}
307
	unset($file);
308
}
309
310
/**
311
 * This hook is fired once WP, all plugins, and the theme are fully loaded and instantiated.
312
 *
313
 * AJAX requests should use wp-admin/admin-ajax.php. admin-ajax.php can handle requests for
314
 * users not logged in.
315
 *
316
 * @link http://codex.wordpress.org/AJAX_in_Plugins
317
 *
318
 * @since 3.0.0
319
 */
320
do_action( 'wp_loaded' );
321
322
323
$action = esc_attr(trim($_POST['action']));
324
325
//A bit of security
326
$allowed_actions = array(
327
    'my_allow_action_1',
328
    'my_allow_action_2',
329
    'my_allow_action_3',
330
    'my_allow_action_4',
331
    'my_allow_action_5'
332
);
333
334
if(in_array($action, $allowed_actions)){
335
    if(is_user_logged_in())
336
        do_action('MY_AJAX_HANDLER_'.$action);
337
    else
338
        do_action('MY_AJAX_HANDLER_nopriv_'.$action);
339
}
340
else{
341
    die('-1');
342
}