Posts programados que no se publican

Hace bastante tiempo tuve problemas con los posts programados (ayer mismo hablábamos de este asunto). Suelo escribir según tengo el día de inspirado y no siempre publico todo el mismo día. Aquí por ejemplo, en Ayuda WordPress, suelo programar muchos posts para poder ofrecer siempre al menos un truco o guía al día, luego además publico todo aquello que sea actualidad rabiosa.

posts-programados

Pues bien, a lo que iba, tras la migración inicial de Mayo comprobé que los posts programados no terminaban de publicarse nunca, cuando llegaba la hora en que tenían que salir a la luz empezaban como un bucle infinito en el que cada vez subía el contador de tiempo que faltaba para que se publicara el post en cuestión.

Y, tras mucho investigar, di con la solución que, por supuesto, tenía que ver con algo raro que pasó en la migración. Cuando lo descubrí lo compartí en los foros de soporte de Mediatemple, pero hoy he caído en que nunca lo comenté aquí, craso error que ahora voy a solucionar.

Bien, pues el asunto es que es algo que tiene que ver con el archivo ‘wp-cron.php‘ y la configuración del servidor …

LA SOLUCIÓN

  1. Teclea el siguiente comando a través de SSH (por supuesto, debes tener acceso a tu servidor por este medio)
    wget http://tudominio.com/wp-cron.php

    Si todo está bien verás un mensaje de «OK». Pero si hay problemas verás un feo mensaje de error 404 en la ventana del terminal. Si tienes esta mala suerte debes seguir estos pasos …

  2. Abre tu fichero ‘etc/hosts
  3. Observa si la DNS a que apunta no es la dirección DNS de tu dominio (p.ej.: si la DNS de tu domino es 75.38.40.200 y el fichero de hosts apunta a 125.0.0.3)
  4. Cambia la DNS errónea en el fichero ‘etc/hosts‘ a la DNS real de tu dominio
  5. Comprueba de nuevo si tu fichero ‘wp-cron.php‘ funciona correctamente tecleando lo mismo de antes …
    wget http://tudominio.com/wp-cron.php

    Si obtienes un «OK» ya lo tienes

También, por supuesto, te puedes encontrar en la situación en que no tengas acceso vía SSH. En ese caso siempre puedes pedir al servicio técnico de tu alojamiento que hagan esta comprobación, para eso pagas ¿no?.

VALORA Y COMPARTE ESTE ARTÍCULO PARA MEJORAR LA CALIDAD DEL BLOG…
(2 votos, promedio: 5)

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado.

26 comentarios en “Posts programados que no se publican”

  1. Pingback: Bitacoras.com

  2. A veces cuando haces cambio de horario (por migraciones, horario de verano, etc) también puede verse afectada la base de datos en cuanto a esto de los post programados.

    Hay que contemplar estos cambios si uno modifica la hora por zona horaria, etc; ya que cambiamos la hora general, pero no la de los post a futuro.

    1. A mi siempre me pasó esto, y nunca me molesté en buscarle la solución por vago y porque igual tengo que actualizar todo al WP 2.7, así que por lo general terminaba publicando los posts programados a mano entrando desde mi PDA o de donde pudiese. Gracias por la info!

  3. Yo pasé por el mismo problema alojado en un hosting con acceso limitado (servage.net). Después de muchas peleas con ellos me dijeron que no podian permitir a wp-cron.php hacer tantas peticiones.

    La solución es cambiar el código de includescron.php

    Se tiene que sustituir la función spawn_cron por esta:

    <code>function spawn_cron() {

    $crons = _get_cron_array();

    if ( !is_array($crons) )

    return;

    $keys = array_keys( $crons );

    if ( array_shift( $keys ) > time() )

    return;

    $cron_url = get_option( 'siteurl' ) . '/wp-cron.php';

    $parts = parse_url( $cron_url );

    if ($parts['scheme'] == 'https') {

    // support for SSL was added in 4.3.0

    if (version_compare(phpversion(), '4.3.0', '>=') && function_exists('openssl_open')) {

    $port = isset($parts['port']) ? $parts['port'] : 443;

    $argyle = @fsockopen('ssl://' . $parts['host'], $port, $errno, $errstr, 0.01);

    } else {

    return false;

    }

    } else {

    $port = isset($parts['port']) ? $parts['port'] : 80;

    $argyle = @ fsockopen( $parts['host'], $port, $errno, $errstr, 0.01 );

    }

    if ( $argyle ) {

    fputs( $argyle,

    "GET {$parts['path']}?check=" . wp_hash('187425') . " HTTP/1.0rn"

    . "Host: {$_SERVER['HTTP_HOST']}rnrn"

    );

    }

    else {

    //BEGIN COPIED wp-cron.php CONTENTS

    if ( get_option('doing_cron') > time() )

    exit;

    update_option('doing_cron', time() + 30);

    $crons = _get_cron_array();

    $keys = array_keys($crons);

    if (!is_array($crons) || $keys[0] > time())

    return;

    foreach ($crons as $timestamp => $cronhooks) {

    if ($timestamp > time()) break;

    foreach ($cronhooks as $hook => $keys) {

    foreach ($keys as $key => $args) {

    $schedule = $args['schedule'];

    if ($schedule != false) {

    $new_args = array($timestamp, $schedule, $hook, $args['args']);

    call_user_func_array('wp_reschedule_event', $new_args);

    }

    wp_unschedule_event($timestamp, $hook, $args['args']);

    do_action_ref_array($hook, $args['args']);

    }

    }

    }

    update_option('doing_cron', 0);

    //END COPIED wp-cron.php CONTENTS

    }

    }</code>

    El único problema es que tienes que volver a cambiarlo cada vez que actualizas wordpress.

    Espero que os sirva de ayuda. A mi me costó un par de dias dar con la solución

  4. Muchas Gracias Fernando, la verdad que recién me estoy iniciando en esto de WordPress y quiero agradecerte porque tu blog realmente me solucionó la vida…

    Gracias

  5. Pingback: NexoGeek...Tecnología, Recursos, Cultura..y más.

  6. Pues a mi no me ha ido bien ninguna de las opciones que dáis. Mi hosting está con Windows Server 2003, y no puedo hacer lo que comentáis en el post. También he intentado lo que comenta Sr. Ceguero y nada, me da error y no puedo ni acceder al blog. ¿Alguna solución para Windows Server porfa?

    Gracias!

  7. Si no puedes entrar en el blog después de modificar el cron.php, tiene que estar mal puesto algo. ¿Que versión de wordpress tienes instalada?

  8. Este es el archivo cron.php completo que a mi me funciona para wordpress 2.7
    Machácalo (antes renombra el tuyo) y comprueba que tiene los permisos bien.

    Ya contarás.

  9. Genial, sencillamente genial. A sus pies.

    No sé que haría al copiar y pegar el texto, pero no funcionaba. Ahora voy a comparar el código para ver dónde lo hacía mal yo, aunque tampoco tiene tanto secreto el copiar y pegar para que no me saliera bien.

    De nuevo muchas gracias, y excelente solución al problema, que no es precisamente pequeño. A ver qué tal cuando salga la 2.8, aunque tardaré un tiempo en probarla.

    Saludos,

  10. Pues me alegro. Yo el problema lo arregle en la 2.6 y la solución me ha funcionado para todas hasta ahora.

    Un saludo.

  11. Hola!

    he llegado hasta este post buscando cómo solucionar problemas con los posts programados, porque tengo un problema parecido, pero ni puedo acceder a mi domino vía SSH, ni es exactamente este el problema que tengo, así que no sé si te habrá ocurrido o sabrás de alguien a quien le ocurra algo parecido.

    En mi caso, lo que ocurre es que dejo el post programado, no se publica, y el lado de la fecha en que tendría que haberse publicado, aparece un texto en naranja "fecha pasado", y el estado "scheduled".

    No consigo encontrar la solución, y no sé de nadie a quien le haya pasado. Tu post es lo más parecido que he encontrado, pero no es exactamente el mismo problema y no sé qué hacer, así que no sé si podrías echarme una mano hoygan! Grasias de antebraso 😉

  12. Hola Pimkie. Según comentas lo que te sucede es lo que me pasaba a mi. Yo lo solucioné con el archivo que aportó el Sr. Ceguero. Prueba a usarlo y si sigue sin ir vuelve a postear a ver si entre todos podemos hacer algo.

    Un saludo

  13. Actualicé a la versión 2.8 de wordpress y funciona si le pongo la hora, programo y no lo vuelvo a tocar, pero si por algún motivo me equivoco en la hora, y edito el post para modificarla, entonces sigue fallando. A ver si en la versión 2.8.1. se soluciona.

    Gracias a todos!

  14. Pingback: Entrada programadas que no se publican | Ayuda WordPress

  15. Pues a mi me sigue dando problemas a pesar de que la consulta me devuelve el OK:

    HTTP request sent, awaiting response… 200 OK

  16. Buenas que tal, he llegado a este post buscando alguna solución ya que los post programados no los publica, he probado de todo, reinstalar wordpress, revisar mediante el ssh el cron.php, limpiar la base de datos, todo lo que se me ha ocurrido, pero nada. A pesar de todo intento publicarla "a mano" si edito la entrada en el estado no me aparece publicar, para ello le doy a edición rápida, donde si me aparece el estado, pero a pesar de cambiar el estado hace caso omiso y no publica.

    Para publicar el post, tengo que eliminarlo y volver a crearlo, a ver si alguien se le ocurre alguna solución, lo curioso es que hace varios días si funcionaba sin problemas. No he probado el codigo más arriba ya que no se si es compatible con la versión de wp que utilizo 3.3.1

    Gracias y un saludo

  17. ¡Gracias Fernando! La solución propuesta ha funcionado a la perfección sobre wordpress 3.5.1. Al realizar la llamada a wp-cron.php tardó bastante la primera vez, pero entonces comenzó a procesar pingbacks almacenados en alguna cola no procesada (Empecé a recibir los típicos correos de «Nuevo pingback»). También se procesaron las entradas programadas en estado «programación perdida».

    Las siguientes llamadas a wp-cron.php se procesaron casi instantáneamente. Asumo que se liberó el atasco.

    Un saludo

  18. Pingback: Problemas con Cron, artículos/posts programados que no se publican en Wordpress | LiGNUx

  19. Pingback: Entrada programadas que no se publican

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Ir arriba Ir al contenido