Problema de la página futura de WordPress (no se muestra)

Me han pedido que solucione un problema en un sitio de wordpress. El problema es causado por el hecho de que las publicaciones deben ser utilizadas en lugar de páginas. Sin embargo, el sitio está en funcionamiento y la opción más rápida sería solucionar el problema utilizando un truco de tipo.

El sitio tiene una sección de eventos, cada evento es una página (este es el problema, realmente debería ser una publicación). Para tener eventos próximos y pasados, se usa la fecha de publicación, por lo tanto, los próximos eventos tienen un estado de publicación de ‘futuro’.

Hay una página de lista de eventos que los muestra bien usando el query_post correcto (). Aunque el problema surge cuando haces clic en el evento real (que es una página futura). Si has iniciado sesión como administrador, la página aparece, pero si no has iniciado sesión, obtienes una página 404.

Ahora, si se publican, entonces “¡El futuro es ahora!” el complemento resolvería este problema. Tengo la sensación de que la única forma de solucionar el problema es volver a escribir parte de los archivos principales de WordPress.

Cualquier consejo sería genial, tengo mucha experiencia con WordPress, incluso si puedes orientarme en la dirección correcta.

Saludos, Jason

[Actualizar]

Gracias maiorano84 por su respuesta detallada. A la larga, tengo la intención de moverlos a las publicaciones, pero mientras tanto han pedido que lo solucionemos lo antes posible sin cambiar las URL (hoy enviaron un correo electrónico masivo con una lista de eventos sin verificar ningún enlace).

Su solución de incluir post_status future no funciona en este caso, ya que wordpress no llega a la etapa de carga de la plantilla. Algo en el núcleo de wordpress evita que llegue tan lejos. Idealmente, si fueran un anzuelo que podría utilizar para anular este comportamiento mientras tanto sería excelente, pero si se trata de ello, editaré temporalmente los archivos centrales.

[Actualización 2]

Ahora conozco las dos funciones que necesitan edición o uso de un enlace que se relaciona con ellas.

Primero de nosotros is_404() que necesita cambiar para no agregar páginas futuras como 404

En segundo lugar, tenemos is_page() necesitamos devolver true si una página es futura

[Actualización 3]

He encontrado cómo hacer esto en el núcleo. Si vas a wp-includes/query.php línea 2682. Copia esto en lugar de la función anterior que funciona correctamente. Si tiene una mejor manera, por favor hágamelo saber. Gracias.

  /** Future Pages **/ // Check post status to determine if post should be displayed. if ( !empty($this->posts) && ($this->is_single || $this->is_page) ) { $status = get_post_status($this->posts[0]); $post_status_obj = get_post_status_object($status);; if ( !$post_status_obj->public ) { if ( $post_status_obj->protected ) { $this->is_preview = true; print_r($status); if ( 'draft' != $status ) { $this->posts[0]->post_date = current_time('mysql'); } else { $this->posts = array(); } } elseif ( $post_status_obj->private ) { if ( ! current_user_can($read_cap, $this->posts[0]->ID) ) $this->posts = array(); } else { $this->posts = array(); } } /** END **/ 

En realidad, puede agregar un parámetro post_status de ‘futuro’ a las consultas de su página. REALMENTE no deberías modificar tus archivos principales para hacer lo que quieras. Entonces, en sus plantillas page.php y archive.php (u otras plantillas relevantes que controlen su visualización de eventos), puede hacer algo como esto:

 -1, 'post_status'=>'publish,future'); $query = new WP_Query($params); if($query->have_posts()) : while($query->have_posts()) : $query->the_post(); ?>   

Esto es una simplificación excesiva, pero el uso de las consultas correctas en los archivos correspondientes le permitirá mostrar sus páginas de la manera que desee.

Más información aquí: http://codex.wordpress.org/Class_Reference/WP_Query

Otra cosa que vale la pena considerar, y me doy cuenta de que esto no formó parte de su pregunta, pero muy bien puede resolver su problema:

¿Por qué no crear un subdominio en el servidor de su cliente donde puede trabajar para arreglar todo sin interrumpir la experiencia del usuario? Puede importar fácilmente la base de datos existente en su entorno de desarrollo y hacer todos los cambios que necesite sin afectar la versión en vivo.

Comida para el pensamiento. Mi consejo sería cortar esto de raíz, y convertir las páginas a publicaciones lo antes posible, de lo contrario, el sitio web se convertirá en un lío gigante muy rápidamente, pero esa es su decisión.

Espero que esto ayude.

ACTUALIZAR:

Todavía recomendaría no alterar los archivos centrales, pero si es un último recurso hasta que todo se solucione, entonces tenga que hacerlo. Aquí hay una solución “WP Friendly” que creo que podría ayudar:

 add_action('wp','future_redirect', 0); function future_redirect($WP_Object) { $page = is_page() ? get_page(get_the_ID()) : false; if($page && $page->post_status == 'future') { wp_redirect(/*YOUR REDIRECT URL*/); exit(); } return $WP_Object; }