it-swarm-es.com

Cómo establecer el estado de publicación como borrador si es más antiguo que hoy

En una pregunta anterior, necesitaba establecer una publicación con fecha futura (tipo de publicación personalizada) tal como se publicó en guardar en lugar de programarla.

En la fecha en que está 'programado', me gustaría configurarlo como borrador nuevamente. He estado tratando de enlazar con init y envolverlo en un tipo de publicación si se comprueba. Pensé que se compararía con la hora del servidor y luego establecería el estado en borrador si era anterior a la hora del servidor.

Como un esquema aproximado:

if custom post type
  get_the_time of post
  get the server time
  if post time is older than server time set status to draft
endif

Aquí y actualizo con algún código con el que estoy trabajando.

function sfn_show_expire(){
    global $wpdb;
    $server_time = date('mdy');
    $result = $wpdb->get_results("SELECT * FROM wp_posts WHERE post_type = 'show' AND post_status = 'publish'");
    if( !empty($result)) foreach ($result as $a){
        $show_time = get_the_time('mdy', $a->ID );
        if ( $server_time > $show_time){
            $my_post = array();
            $my_post['ID'] = $a->ID;
            $my_post['post_status'] = 'draft';
            wp_update_post( $my_post );
        }
    } // end foreach
}
add_action( 'init', 'sfn_show_expire' );

Está recibiendo las publicaciones que necesito y me está dando la hora del servidor, pero no está haciendo nada más allá de lo que puedo decir.

2
curtismchale

Su consulta no le está dando una ID de publicación, le está dando una publicación completa. El SELECT * devuelve todas las columnas, ID, post_status, etc. Por lo tanto, establecer $my_post['ID'] = $a no hace nada por usted en este caso.

Trate de usar: $my_post['id'] = $a->ID; en su lugar. Eso debe establecer su identificación con precisión antes de llamar a wp_update_post() y usted debe estar en el negocio.

Aparte de eso, no veo ningún problema con lo que está haciendo ... excepto que al consultar la base de datos cada vez que se carga el sitio puede crear problemas de rendimiento. En lugar de eso, configuré un trabajo de cron por hora para automatizar el proceso ... entonces no depende ni ralentiza el tráfico de usuarios.

1
EAMann