ドラフト投稿プレビューを取得するためにwp_remote_getで現在のCookieを渡す


9

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

私はすでに質問をチェックします:

しかし、どちらにも、Cookieを取得してwp_remote_get関数に渡す方法を示しています。

Cookieをwp_remote_get関数に渡すことができると思いますが、WordPressのドキュメントでは、WordPressがCookieを保存する方法を説明していますが、Cookie名にハッシュ値を使用するように注意するにはどうすればよいですか?

私がやりたいのは、投稿IDを指定して、WordPress投稿ビューページのコンテンツを取得して分析することです。既に公開されている投稿はすべて正常に機能しますが、ドラフト投稿の場合、ページが存在しないことがわかります。簡略化したコードは次のとおりです。

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

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

よろしくお願いします。

回答:


7

私はめったにCookieを扱っておらず、完全なメカニズムについてはわかりませんが、プレビューページのソースを取得するために現在のユーザーのCookieを渡す基本的な作業例を次に示します。

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

0

ここでのシナリオは何ですか?別の場所にある現在のインストールからドラフト投稿プレビューを取得しようとしていますか?

取得する前に自分を認証していますか?

あなたが使う必要があると思います、

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

次に、あなたも実行する必要があるかもしれません、

wp_set_current_user($user_id);

wp_set_current_user、おそらくに必要とされている実際のプレビューにアクセスします(?)。それについては100%確実ではありませんが、編集後の画面には必要だと思います。そのため、その延長であると想定します。確認のために、コアファイルを見回す機会がまだありません。

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

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


おかげで、私はあなたが私に尋ねる情報で質問を更新します。
leticia

参照されている関数は、ユーザーが既にログインしていて、そのCookieを使用してドラフトのプレビューを取得するため、役に立ちません。
leticia 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.