Passer les cookies actuels dans wp_remote_get pour obtenir la version préliminaire de la publication du brouillon

9

Je souhaite transmettre les cookies de l'utilisateur actuel dans la fonction wp_remote_get pour obtenir le contenu de la page Draft Post Preview.

Je vérifie déjà les questions:

Mais dans l'un d'eux apparaît comment je peux obtenir les cookies pour le passer à la fonction wp_remote_get .

Je suppose que je peux faire ce que je veux en passant les cookies à la fonction wp_remote_get , ici dans la documentation WordPress mentionnez comment WordPress stocke les cookies mais comment puis-je les faire prendre soin d'utiliser une valeur de hachage dans le nom du cookie?

Ce que je veux faire, c'est donner un ID de publication, obtenir le contenu de la page d'affichage de la publication WordPress et l'analyser. Pour les articles déjà publiés, tout fonctionne bien, mais pour les articles préliminaires, je constate que la page n'existe pas. Voici le code simplifié:

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

Ce code est exécuté lorsque le propriétaire de la publication le modifie, de sorte que l'utilisateur est déjà authentifié et que la demande concerne une publication locale. Comment puis-je accomplir que wp_remote_get me renvoie le contenu de la page Post Preview? comme le fait WordPress lorsque j'accède au lien d'aperçu dans mon navigateur.

Merci d'avance.

leticia
la source

Réponses:

7

Je traite rarement les cookies et je ne suis pas sûr de la mécanique complète là-bas, mais voici un exemple de travail de base pour passer les cookies de l'utilisateur actuel pour récupérer la source de la page d'aperçu:

$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
la source
0

Quel est le scénario ici, vous essayez de récupérer un aperçu de la version préliminaire de votre installation actuelle, situé sur une autre, non?

Vous authentifiez-vous avant de récupérer?

Je pense que tu devrais utiliser,

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

Ensuite, vous devrez peut-être également exécuter,

wp_set_current_user($user_id);

Avec wp_set_current_useréventuellement besoin d'accéder réellement à l'aperçu (?). Je dirai que je ne suis pas sûr à 100%, mais je pense que c'est nécessaire pour l'écran de post-édition, donc étant une extension de cela, on pourrait le supposer. Je n'ai pas encore eu l'occasion de parcourir les fichiers principaux pour confirmation.

Cela devrait définir les cookies pour vous et vous permettre d'afficher votre aperçu, ce qui signifie que vous n'avez théoriquement pas à passer quoi que ce soit dans le paramètre du tableau de cookies car ils sont déjà définis.

Voyons aussi votre code!

Adam
la source
Merci, je mets à jour la question avec les informations que vous me demandez.
leticia
Les fonctions référencées ne m'aident pas car l'utilisateur est déjà connecté et je souhaite utiliser ses cookies pour obtenir l'aperçu d'un brouillon.
leticia