更新:私はこれに自分で答えました。下記参照。
set_the_id()
関数が存在する場合、関数に相当するものを求めていると思います。
パフォーマンスのために Wordpress と Varnish を使用しており、サイドバーに ESI (Edge Side Include) を使用したいので、最近の投稿や人気のある投稿などを、投稿のコンテンツ自体よりも頻繁に更新できます。
これを行う 1 つの方法は、次のようなコードを使用して、Varnish が ESI コメントからアクセスできるように、プラグイン ディレクトリなどにエンドポイントを作成することです。
<?php
/* ESI handler for Varnish - Sidebar (all tabs except search) */
$cwd = getcwd();
$path = substr($cwd, 0, strpos($cwd, 'wp-content/'));
require $path . 'wp-blog-header.php';
echo '<!-- ESI sidebar created '.date(DATE_RFC2822).' -->',"\n";
if ( ! dynamic_sidebar( 'primary-widget-area' ) )
{
echo '<!-- Unable to load primary-widget-area (sidebar) -->';
}
?>
これまでのところすべて問題ありません。これは、Wordpress をロードし、関連するすべてのプラグインを見つけるのに十分です。ただし、 get_the_id()、in_category()、投稿オブジェクトのプロパティなどを使用して特定の投稿などを強調表示する必要があり、投稿がまだ読み込まれていないため、さまざまなポイント (具体的wp-includes/post-template.php
には 29 行目)でエラーが発生します。
のような URL にアクセスしたかのように、上記のコードで特定の投稿 ID をロードするように Wordpress に指示するにはどうすればよいhttp://example.com?p=1
ですか? 投稿がアクティブであるかのように環境を設定したいだけで、ESI 呼び出しで現在の投稿 ID をパラメーターとして渡すことができます。
query_posts()が役立つかもしれないと思ったので、追加してみました:
query_posts( 'p=5' );
しかし、それは何もしません。
私も疑問に思いましたWP_Post::get_instance()
(投稿IDではなく、オブジェクトのみを受け取るようです)。
他に使えるものはありますか?