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