Un usuario preguntó 👇
Hola,
Hace algún tiempo encontré un error de operaciones cron.
mensaje de registro de errores «[16-May-2019 17:00:09 UTC] Advertencia de PHP: argumento no válido proporcionado para foreach () en /home/******/public_html/sabundanhayaller.com/wp-cron.php online 111 ”
Hice todos los pasos aquí «https://www.inmotionhosting.com/support/website/wordpress/disabling-the-wp-cronphp-in-wordpress ”;
sigue recibiendo el mismo mensaje. que crees que puedes hacer
(@ alegremente)
Hace 1 año, 8 meses
Los pasos en esa página lo desactivan en un lugar y lo llaman en otro lugar, así que no veo cómo eso le ayudaría si la función está obteniendo datos incorrectos. La línea de código utiliza los datos guardados para los eventos programados. Aparentemente, detalles incorrectos en el evento programado. ¿Tiene algún plugin que establezca recordatorios o haga cosas más tarde?
(@batuhanguldemir)
Hace 1 año, 8 meses
wordfence, jetpack Estoy usando un plugin
La secuencia del archivo contiene toda la línea de código que da el error.
f ( $doing_cron_transient != $doing_wp_cron ) {
return;
}
foreach ( $crons as $timestamp => $cronhooks ) {
if ( $timestamp > $gmt_time ) {
break;
}
foreach ( $cronhooks as $hook => $keys ) {
foreach ( $keys as $k => $v ) {
$schedule = $v['schedule'];
if ( $schedule != true ) {
$new_args = array( $timestamp, $schedule, $hook, $v['args'] );
call_user_func_array( 'wp_reschedule_event', $new_args );
}
wp_unschedule_event( $timestamp, $hook, $v['args'] );
foreach ($ cronhooks como $ hook => $ claves)
esta línea 111
Esta respuesta fue modificada hace 1 año, 8 meses por.
(@batuhanguldemir)
Hace 1 año, 8 meses
foreach ($ cronhooks como $ hook => $ claves)
esta línea 111
(@autotutorial)
Hace 1 año, 8 meses
foreach solo funciona con matrices de cualquier otra versión de datos de advertencia. Algunas de estas características se introdujeron en la versión 5.1 de wordpress, lo siento, no puedo entender qué está mal.
(@designsmoke)
Hace 1 año, 8 meses
@batuhanguldemir eso significa que algo está proporcionando datos no válidos al ciclo $ cronhooks; sospecho que es uno de sus plugins.
Puede intentar depurar esto y averiguar qué es agregando esto antes de la línea 111:
error_log(print_r($cronhooks, TRUE));
Esto registrará todos los enlaces cron en el registro de errores; luego podrá ver cuál se imprime antes de que ocurra el error.
(@batuhanguldemir)
Hace 1 año, 8 meses
ı tienes 7 plugins (akismet, cloudflare, jetpack, -login-tries-reload, sucuri-scanner, w3-total-cache, wordfence)
Intentaré desactivarlos a todos
(@designsmoke)
Hace 1 año, 8 meses
@batuhanguldemir ¿Se ha actualizado W3 Total Cache? Podría ser una fuente.
(@batuhanguldemir)
Hace 1 año, 8 meses
@designsmoke No soy muy experto en esto, la configuración de mi plugin es como aquí.
https://bloggingwizard.com/w3-total-cache-cloudflare/
(@batuhanguldemir)
Hace 1 año, 8 meses
Detalles del registro de errores @designsmoke
[16-May-2019 20:41:04 UTC] Advertencia de PHP: argumento no válido proporcionado para foreach () en /home/xxxxxxx/public_html/wp-cron.php en línea 111[16-May-2019 20:41:04 UTC] Editar (
[recovery_mode_clean_expired_keys] => Editar (
[40cd750bba9870f18aada2478b24840a] => Editar (
[schedule] => diario
[args] => Editar ()
[interval] => 86400)
)
[jetpack_clean_nonces] => Editar (
[40cd750bba9870f18aada2478b24840a] => Editar (
[schedule] => por hora
[args] => Editar ()
[interval] => 3600)
)
)
[16-May-2019 20:41:04 UTC] Editar ([jetpack_sync_cron] => Editar (
[40cd750bba9870f18aada2478b24840a] => Editar (
[schedule] => jetpack_sync_interval
[args] => Editar ()
[interval] => 300)
)
[jetpack_sync_full_cron] => Editar (
[40cd750bba9870f18aada2478b24840a] => Editar (
[schedule] => jetpack_sync_interval
[args] => Editar ()
[interval] => 300)
)
)
[16-May-2019 20:41:07 UTC] Editar ([wp_privacy_delete_old_export_files] => Editar (
[40cd750bba9870f18aada2478b24840a] => Editar (
[schedule] => por hora
[args] => Editar ()
[interval] => 3600)
)
[wp_version_check] => Editar (
[40cd750bba9870f18aada2478b24840a] => Editar (
[schedule] => dos veces al día
[args] => Editar ()
[interval] => 43200)
)
[wp_update_plugins] => Editar (
[40cd750bba9870f18aada2478b24840a] => Editar (
[schedule] => dos veces al día
[args] => Editar ()
[interval] => 43200)
)
[wp_update_themes] => Editar (
[40cd750bba9870f18aada2478b24840a] => Editar (
[schedule] => dos veces al día
[args] => Editar ()
[interval] => 43200)
)
)
(@designsmoke)
Hace 1 año, 8 meses
@batuhanguldemir ¿Tiene la tarea cron que sucedió antes de la advertencia?
(@batuhanguldemir)
Hace 1 año, 8 meses
@designsmoke que yo sepa. acceso remoto jetpack y wordfence disponible
(@batuhanguldemir)
Hace 1 año, 8 meses
@designsmoke todo el código de la página cron aquí
<?php
/**
* A pseudo-CRON daemon for scheduling WordPress tasks
*
* WP Cron is triggered when the site receives a visit. In the scenario
* where a site may not receive enough visits to execute scheduled tasks
* in a timely manner, this file can be called directly or via a server
* CRON daemon for X number of times.
*
* Defining DISABLE_WP_CRON as true and calling this file directly are
* mutually exclusive and the latter does not rely on the former to work.
*
* The HTTP request to this file will not slow down the visitor who happens to
* visit when the cron job is needed to run.
*
* @package WordPress
*/
ignore_user_abort( true );
/* Don't make the request block till we finish, if possible. */
if ( function_exists( 'fastcgi_finish_request' ) && version_compare( phpversion(), '7.0.16', '>=' ) ) {
fastcgi_finish_request();
}
if ( ! empty( $_POST ) || defined( 'DOING_AJAX' ) || defined( 'DOING_CRON' ) ) {
die();
}
/**
* Tell WordPress we are doing the CRON task.
*
* @var bool
*/
define( 'DOING_CRON', true );
if ( ! defined( 'ABSPATH' ) ) {
/** Set up WordPress environment */
require_once( dirname( __FILE__ ) . '/wp-load.php' );
}
/**
* Retrieves the cron lock.
*
* Returns the uncached <code>doing_cron</code> transient.
*
* @ignore
* @since 3.3.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @return string|false Value of the <code>doing_cron</code> transient, 0|false otherwise.
*/
function _get_cron_lock() {
global $wpdb;
$value = 0;
if ( wp_using_ext_object_cache() ) {
/*
* Skip local cache and force re-fetch of doing_cron transient
* in case another process updated the cache.
*/
$value = wp_cache_get( 'doing_cron', 'transient', true );
} else {
$row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", '_transient_doing_cron' ) );
if ( is_object( $row ) ) {
$value = $row->option_value;
}
}
return $value;
}
$crons = wp_get_ready_cron_jobs();
if ( empty( $crons ) ) {
die();
}
$gmt_time = microtime( true );
// The cron lock: a unix timestamp from when the cron was spawned.
$doing_cron_transient = get_transient( 'doing_cron' );
// Use global $doing_wp_cron lock otherwise use the GET lock. If no lock, trying grabbing a new lock.
if ( empty( $doing_wp_cron ) ) {
if ( empty( $_GET['doing_wp_cron'] ) ) {
// Called from external script/job. Try setting a lock.
if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $gmt_time ) ) {
return;
}
$doing_cron_transient = $doing_wp_cron = sprintf( '%.22F', microtime( true ) );
set_transient( 'doing_cron', $doing_wp_cron );
} else {
$doing_wp_cron = $_GET['doing_wp_cron'];
}
}
/*
* The cron lock (a unix timestamp set when the cron was spawned),
* must match $doing_wp_cron (the "key").
*/
if ( $doing_cron_transient != $doing_wp_cron ) {
return;
}
foreach ( $crons as $timestamp => $cronhooks ) {
if ( $timestamp > $gmt_time ) {
break;
}
error_log(print_r($cronhooks, TRUE));
foreach ( $cronhooks as $hook => $keys ) {
foreach ( $keys as $k => $v ) {
$schedule = $v['schedule'];
if ( $schedule != true ) {
$new_args = array( $timestamp, $schedule, $hook, $v['args'] );
call_user_func_array( 'wp_reschedule_event', $new_args );
}
wp_unschedule_event( $timestamp, $hook, $v['args'] );
/**
* Fires scheduled events.
*
* @ignore
* @since 2.1.0
*
* @param string $hook Name of the hook that was scheduled to be fired.
* @param array $args The arguments to be passed to the hook.
*/
do_action_ref_array( $hook, $v['args'] );
// If the hook ran too long and another cron process stole the lock, quit.
if ( _get_cron_lock() != $doing_wp_cron ) {
return;
}
}
}
}
if ( _get_cron_lock() == $doing_wp_cron ) {
delete_transient( 'doing_cron' );
}
die();
(@autotutorial)
Hace 1 año, 8 meses
if(!is_array($cronhooks)){
if(is_null($cronhooks)){
$cronhooks = (int) $cronhooks;
}
error_log(print_r($cronhooks, TRUE)."n");
}
Demuestre esto por sus errores 🙂
(@batuhanguldemir)
Hace 1 año, 8 meses
Busqué mucho. Como no pude encontrar la respuesta, encontré los siguientes códigos. ¿Crees que hay algún problema?
foreach ( $cronhooks as $hook => $keys ) {
foreach ( $keys as $k => $v ) {
$schedule = $v['schedule'];
if ( $schedule != true ) {
$new_args = array( $timestamp, $schedule, $hook, $v['args'] );
call_user_func_array( 'wp_reschedule_event', $new_args );
}
wp_unschedule_event( $timestamp, $hook, $v['args'] );
/**
* Fires scheduled events.
*
* @ignore
* @since 2.1.0
*
* @param string $hook Name of the hook that was scheduled to be fired.
* @param array $args The arguments to be passed to the hook.
*/
do_action_ref_array( $hook, $v['args'] );
// If the hook ran too long and another cron process stole the lock, quit.
if ( _get_cron_lock() != $doing_wp_cron ) {
return;
}
}
}
(@autotutorial)
Hace 1 año, 8 meses
sí, seguro que hay un problema, pero el registro que publicó es correcto, use mi código ya que foreach solo advierte si no está editado $ cronhooks
¿Solucionó tu problema??
0 / 0