Passing current cookies in wp_remote_get to get Draft Post Preview

I want pass current user cookies in wp_remote_get function to get a Draft Post Preview page content.

I check already the questions:

  • What URL do you pass to wp_remote_get to load the body of the current post’s preview?
  • How can I call “preview post” from wp_remote_get with authentication?

But in either of them appears how I can get the cookies to the pass it to wp_remote_get function.

I assume I can do what I want passing the cookies to wp_remote_get function, here in WordPress documentation mention how WordPress stores the cookies but how can I get them taking in care they use a hash value in the cookie name?

What I want to do is given a Post ID get the content of the WordPress Post view page and analyse it. For the already published Posts all works fine, but for Draft Posts I get that the page doesn’t exist. Here is the code simplified:

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

This code is executed when the owner of the Post is editing it, so the user is already authenticated and the request is for a local Post. How I can accomplish that wp_remote_get returns me the Post Preview page content? as WordPress does when I go to the preview link in my browser.

Thanks in advanced.

2 s
2

I rarely deal with cookies and not sure about complete mechanics there, but here is basic working example of passing current user’s cookies to retrieve preview page source:

$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 );

Leave a Comment