web-dev-qa-db-ja.com

Draft Post Previewを取得するためにwp_remote_getに現在のCookieを渡す

ドラフトポストプレビューページのコンテンツを取得するには、 wp_remote_get 関数に現在のユーザーのCookieを渡します。

私はすでに質問を調べています:

しかし、どちらにもクッキーを取得して wp_remote_get functionに渡す方法があります。

wp_remote_get function、 ここにWordPressのドキュメントに に記述しますが、どのようにしてそれらがハッシュを使用するように注意することができますクッキー名の値は?

私がやりたいことは、投稿IDにWordPressの投稿ビューページのコンテンツを取得して分析することです。すでに公開されている投稿ではすべてうまくいきますが、ドラフト投稿ではページが存在しないことがわかります。これが単純化されたコードです。

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

このコードは投稿の所有者が編集しているときに実行されるので、ユーザーはすでに認証されており、要求はローカルの投稿に対するものです。 wp_remote_getからポストプレビューページのコンテンツが返されるようにするにはどうすればよいですか。 WordPressと同じように、ブラウザのプレビューリンクにアクセスします。

進んでくれてありがとう。

8
leticia

私はめったにクッキーを扱っていないし、そこに完全な仕組みについてはわからないが、これはプレビューページのソースを取得するために現在のユーザのクッキーを渡す基本的な作業例です:

$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

ここでのシナリオは何ですか、あなたはあなたの現在のインストールからドラフトポストプレビューを取り出そうとしています、他にありますね。

あなたは回収する前にあなた自身を認証していますか?

私はあなたが使う必要があるだろうと思います、

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

それならあなたも走る必要があるかもしれません、

wp_set_current_user($user_id);

実際にプレビューにアクセスするにはwp_set_current_userが必要かもしれません(?)。私はそれについて100%確信があるわけではないと言うでしょう、しかし私はそれがポスト編集スクリーンのために必要であると信じています、それでその延長であるなら、人はそう思うでしょう。確認のためにまだコアファイルを見渡す機会がありませんでした。

これでCookieが設定され、プレビューを表示できるようになります。つまり、Cookieの配列パラメータには既に設定されているので、理論的には何も渡す必要はありません。

あなたのコードも見てみましょう。

0
userabuser