web-dev-qa-db-fra.com

Passer les cookies actuels dans wp_remote_get pour obtenir un aperçu de la brouillon

Je souhaite transmettre les cookies des utilisateurs actuels dans wp_remote_get function pour obtenir le contenu de la page de prévisualisation de la publication.

Je vérifie déjà les questions:

Mais dans l'un d'eux, il apparaît comment je peux obtenir les cookies pour le transférer à wp_remote_get function.

Je suppose que je peux faire ce que je veux en passant les cookies à wp_remote_get function, ici dans la documentation WordPress mentionne comment WordPress stocke les cookies, mais comment puis-je les obtenir en prenant soin qu'ils utilisent une valeur de hachage dans le cookie prénom?

Ce que je veux faire, c'est donner un identifiant de publication, obtenir le contenu de la page d'affichage WordPress Post et l'analyser. Pour les articles déjà publiés, tout fonctionne bien, mais pour les articles brouillons, 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 est en train de la modifier. L'utilisateur est donc déjà authentifié et la demande concerne une publication locale. Comment puis-je accomplir cela? Wp_remote_get me renvoie le contenu de la page de prévisualisation? comme le fait WordPress quand je vais au lien de prévisualisation dans mon navigateur.

Merci d'avance.

8
leticia

Je traite rarement des cookies et je ne suis pas sûr de la mécanique complète, mais voici un exemple de base d'utilisation de la transmission des 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 );
5
Rarst

Quel est le scénario ici, vous essayez de récupérer un brouillon de postage de votre installation actuelle, situé sur un autre, n'est-ce pas?

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

Je pense que vous auriez besoin d'utiliser,

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

Ensuite, vous devrez peut-être aussi courir,

wp_set_current_user($user_id);

wp_set_current_user pouvant éventuellement être nécessaire pour accéder à l'aperçu (?). Je dirai que je ne suis pas sûr à 100% de cela, mais je pense que c'est nécessaire pour l'écran de post-édition, donc comme une extension de cela, on pourrait le supposer. Je n'ai pas encore eu l'occasion de consulter les fichiers de base 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 besoin de transmettre quoi que ce soit dans le paramètre du tableau de cookies, car ils sont déjà définis.

Permet de voir votre code aussi!

0
userabuser