Pasar las cookies actuales en wp_remote_get para obtener la vista previa del borrador de publicación

9

Quiero pasar las cookies de usuario actuales en la función wp_remote_get para obtener un contenido de página de vista previa de borrador.

Ya reviso las preguntas:

Pero en cualquiera de ellos aparece cómo puedo hacer que las cookies pasen a la función wp_remote_get .

Supongo que puedo hacer lo que quiero pasando las cookies a la función wp_remote_get , aquí en la documentación de WordPress menciono cómo WordPress almacena las cookies, pero ¿cómo puedo hacer que tengan cuidado de que usen un valor hash en el nombre de la cookie?

Lo que quiero hacer es dar una ID de publicación para obtener el contenido de la página de vista de publicación de WordPress y analizarlo. Para las publicaciones ya publicadas, todo funciona bien, pero para las publicaciones en borrador, entiendo que la página no existe. Aquí está el código simplificado:

(...)
$post_permalink = get_permalink($post_id);
$response = wp_remote_get($post_permalink);
$whole_post_page = $response['body'];
(...)

Este código se ejecuta cuando el propietario de la publicación lo está editando, por lo que el usuario ya está autenticado y la solicitud es para una publicación local. ¿Cómo puedo lograr que wp_remote_get me devuelva el contenido de la página Vista previa de publicación? como lo hace WordPress cuando voy al enlace de vista previa en mi navegador.

Gracias de antemano.

leticia
fuente

Respuestas:

7

Raramente trato con cookies y no estoy seguro de la mecánica completa allí, pero aquí hay un ejemplo básico de cómo pasar las cookies del usuario actual para recuperar la fuente de la página de vista previa:

$preview_link = set_url_scheme( get_permalink( $post->ID ) );
$preview_link = esc_url( apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ) ) );
$cookies      = array();

foreach ( $_COOKIE as $name => $value ) {
    $cookies[] = new WP_Http_Cookie( array( 'name' => $name, 'value' => $value ) );
}

$request = wp_remote_get( $preview_link, array( 'cookies' => $cookies ) );
$body    = wp_remote_retrieve_body( $request );
Rarst
fuente
0

¿Cuál es el escenario aquí? Estás intentando recuperar un borrador de la vista previa de tu instalación actual, ubicada en otra, ¿verdad?

¿Te estás autenticando antes de recuperar?

Estoy pensando que deberías usar,

wp_signon($credentials, $secure_cookie); $secure_cookie is boolean

Entonces es posible que también necesites correr,

wp_set_current_user($user_id);

Con wp_set_current_userpudiendo ser necesaria para acceder a la vista previa en realidad (?). Diré que no estoy 100% seguro de eso, pero creo que es necesario para la pantalla de edición posterior, por lo que al ser una extensión de eso, uno asumiría que sí. Todavía no he tenido la oportunidad de revisar los archivos principales para confirmarlo.

Eso debería configurar las cookies por usted y permitirle ver su vista previa, lo que significa que, en teoría, no tiene que pasar nada al parámetro de la matriz de cookies, ya que ya están configuradas.

¡Veamos tu código también!

Adán
fuente
Gracias, actualizo la pregunta con la información que me piden.
leticia
Las funciones a las que se hace referencia no me ayudan porque el usuario ya está registrado y quiero usar sus cookies para obtener la Vista previa de un borrador.
leticia