wwwAndries
New Pleskian
PRODUCT, VERSION, OPERATING SYSTEM, ARCHITECTURE:
WordPress Toolkit 3.5.0 >
PROBLEM DESCRIPTION:
WordPress plugin/theme cron events are executed through WP-CLI, cron event is removed after executing and reporting status is success, but the plugin/theme "do_action" is actually never excuted.
STEPS TO REPRODUCE:
I’ve disabled the wp-cron for all of the sites I’am managing and use the system cron to run WP-CLI commands like:
${WP_CLI} -instance-id ${INSTANCE_ID} -- cron event run --due-now --url="${WP_SITE_URL}" &>> $CWS_TMP_FILE
The "due-now" cron events were executed and returned success status after executing, but the plugin/theme action/filter never executed. In the WordPress plugin.php the function “do_action_ref_array” was executed but the global $wp_filter[ $tag ] was NULL.
function do_action_ref_array( $tag, $args ) {
global $wp_filter, $wp_actions, $wp_current_filter;
if ( ! isset( $wp_actions[ $tag ] ) ) {
$wp_actions[ $tag ] = 1;
} else {
++$wp_actions[ $tag ];
}
// Do 'all' actions first
if ( isset( $wp_filter['all'] ) ) {
$wp_current_filter[] = $tag;
$all_args = func_get_args();
_wp_call_all_hook( $all_args );
}
+ if ( ! isset( $wp_filter[ $tag ] ) ) {
+ if ( isset( $wp_filter['all'] ) ) {
+ array_pop( $wp_current_filter );
+ }
+ return;
+ }
if ( ! isset( $wp_filter['all'] ) ) {
$wp_current_filter[] = $tag;
}
$wp_filter[ $tag ]->do_action( $args );
array_pop( $wp_current_filter );
}
Because of that, the function returned without an error and WP-CLI reported success, but the $wp_filter[ $tag ]->do_action( $args ); was never executed!
Plesk changed there wrapper for WP-CLI last year and added “skip-plugins: true” and “skip-themes: true” in the wp-cli.yml. Every WP-CLI command is executed without loading plugins and themes. This is the reason why $wp_filter[ $tag ] was NULL and the plugin/theme action/filter was never executed.
Tempory solution
After adding “--skip-plugins=dummy-plugin” at the WP-CLI command “cron event run --due-now”, all scans run fine.
EXPECTED RESULT:
When executing ${WP_CLI} -instance-id ${INSTANCE_ID} -- cron event run --due-now --url="${WP_SITE_URL}", I expect that the cron events of the core, plugins and themes are run.
ANY ADDITIONAL INFORMATION:
YOUR EXPECTATIONS FROM PLESK SERVICE TEAM:
I would expect that skip-plugins and skip-themes would be false because this is the default WP-CLI behavior. At least document this deviation.
WordPress Toolkit 3.5.0 >
PROBLEM DESCRIPTION:
WordPress plugin/theme cron events are executed through WP-CLI, cron event is removed after executing and reporting status is success, but the plugin/theme "do_action" is actually never excuted.
STEPS TO REPRODUCE:
I’ve disabled the wp-cron for all of the sites I’am managing and use the system cron to run WP-CLI commands like:
${WP_CLI} -instance-id ${INSTANCE_ID} -- cron event run --due-now --url="${WP_SITE_URL}" &>> $CWS_TMP_FILE
The "due-now" cron events were executed and returned success status after executing, but the plugin/theme action/filter never executed. In the WordPress plugin.php the function “do_action_ref_array” was executed but the global $wp_filter[ $tag ] was NULL.
function do_action_ref_array( $tag, $args ) {
global $wp_filter, $wp_actions, $wp_current_filter;
if ( ! isset( $wp_actions[ $tag ] ) ) {
$wp_actions[ $tag ] = 1;
} else {
++$wp_actions[ $tag ];
}
// Do 'all' actions first
if ( isset( $wp_filter['all'] ) ) {
$wp_current_filter[] = $tag;
$all_args = func_get_args();
_wp_call_all_hook( $all_args );
}
+ if ( ! isset( $wp_filter[ $tag ] ) ) {
+ if ( isset( $wp_filter['all'] ) ) {
+ array_pop( $wp_current_filter );
+ }
+ return;
+ }
if ( ! isset( $wp_filter['all'] ) ) {
$wp_current_filter[] = $tag;
}
$wp_filter[ $tag ]->do_action( $args );
array_pop( $wp_current_filter );
}
Because of that, the function returned without an error and WP-CLI reported success, but the $wp_filter[ $tag ]->do_action( $args ); was never executed!
Plesk changed there wrapper for WP-CLI last year and added “skip-plugins: true” and “skip-themes: true” in the wp-cli.yml. Every WP-CLI command is executed without loading plugins and themes. This is the reason why $wp_filter[ $tag ] was NULL and the plugin/theme action/filter was never executed.
Tempory solution
After adding “--skip-plugins=dummy-plugin” at the WP-CLI command “cron event run --due-now”, all scans run fine.
EXPECTED RESULT:
When executing ${WP_CLI} -instance-id ${INSTANCE_ID} -- cron event run --due-now --url="${WP_SITE_URL}", I expect that the cron events of the core, plugins and themes are run.
ANY ADDITIONAL INFORMATION:
YOUR EXPECTATIONS FROM PLESK SERVICE TEAM:
I would expect that skip-plugins and skip-themes would be false because this is the default WP-CLI behavior. At least document this deviation.