web-dev-qa-db-fra.com

wp-cron.php est déclenché, mais la publication programmée n'est pas publiée

Je suis nouveau sur wordpress. Mon site publiait des messages programmés, mais il semble s’être arrêté en raison de pas de trafic . J'ai donc désactivé wp default cron et installé un travail cron via cPanel.

via la commande wget -q -O - http://1pm.today/wp-cron.php?doing_wp_cron

Et usr/bin/curl --user-agent cPanel-Cron http://1pm.today/wp-cron.php?doing_wp_cron

Mais exécuter wp-cron.php comme ceci ne semble pas déclencher de publication programmée.

J'ai même essayé de déclencher le travail cron à partir d'un navigateur (ne sais pas si c'est le bon chemin) http://1pm.today/wp-cron.php?doing_wp_cron

Mais aucun de ces déclencheurs ne publie de publication programmée. Le travail de cron comme celui-ci devrait-il supposer publier le poste programmé? Si tel est le cas, tout conseil pour le déboguer serait grandement apprécié. Je vais essayer de travailler avec le support technique car le site est sur un hôte partagé.

J'ai ajouté la déclaration echo dans wp-cron.php

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;
}

if ( false === $crons = _get_cron_array() )
    die();

$keys = array_keys( $crons );
$gmt_time = microtime( true );
echo "$keys[0] > $gmt_time";
if ( isset($keys[0]) && $keys[0] > $gmt_time )
    die();

echo ":6c";
// The cron lock: a unix timestamp from when the cron was spawned.
$doing_cron_transient = get_transient( 'doing_cron' );
echo "7";

Et la sortie est

1465529020 > 1465525264.31 without reaching ":6c"

Donc, c'est die()s à cause de

if ( isset($keys[0]) && $keys[0] > $gmt_time )

1465529020 > 1465525264.31

Puis-je demander d'où vient $keys[0]?

Je suppose que le $key[0] est un horodatage du premier travail cron et que $gmt_time est l'heure actuelle. Si $key[0] est dans le futur et qu'il devrait abandonner.

J'ai déjà beaucoup de messages manquants, alors j'essaie de mieux comprendre _get_cron_array() mais je ne comprends pas ce qui se passe dans `wp-includes/cron.php.

Il semble que _get_cron_array() ait quelque chose à voir avec cron in wp_options

SELECT *
FROM `wp_options`
WHERE `option_name` LIKE '%cron%'

À ce stade, je suis encore plus confus, car je ne peux pas comprendre comment une publication planifiée est liée au travail cron.

5
Alocus

La fonction _get_cron_array () extrait l'option 'cron' de la base de données. L'option cron contient un tableau composé d'une série d'horodatages Unix et de points d'ancrage.

Ainsi, lorsque l'horodatage est atteint, le hook d'action est appelé.

L'horodatage de 1465529020 est l'équivalent du 10 juin 2016 à 03h23 de l'heure UTC.

L'horodatage de 1465525264 correspond à l'équivalent du 10 juin 2016 à 02h21 de l'heure UTC.

Donc, en gros, cette action devait durer une heure et deux minutes plus tard. C'est pourquoi wp-cron ne l'a pas exécuté. Ce n'était pas encore le moment.

La planification d'une publication à publier à une heure spécifique crée une entrée dans le tableau cron avec l'heure à laquelle elle doit être publiée comme clé et l'action déclenchée pour la publier comme valeur. Lorsque l'heure est atteinte, l'action de raccordement est déclenchée et la publication est publiée. C'est comme ça que wp-cron.php fonctionne.

1
Otto