ループの外側から他のコンテンツを取得する方法はありますか? IDは302で、その内容を別のページに表示する必要があります。
$post
オブジェクトを返すには、 get_page()
を使用できます。$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;
同様に、投稿の$post
オブジェクトを返すために get_post()
を使用することができます。
$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
ループの外に投稿の内容を取得するには、次のように書くことができます。
global $post;
$content = $post->post_content;
if ( !empty( $content ) ) :
echo $content;
endif;
コンテンツにショートコードが含まれている場合は、次のものを使用してください。
$post_id = 22;
$post_object = get_post( $post_id );
echo do_shortcode( $post_object->post_content );
完全を期すために、 Stephen Harrisの記事 に触発された上記のTimのコメントを基にして、the_content()
の使用を可能にする解決策は以下のとおりです。
$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );
そのため、フィルタが適用され(段落が挿入されるなど)、ショートコードが機能します。
ターゲットの投稿ID(302)を知っているので、ループ外で使用できる便利な構文を見つけることができます(ただし、パフォーマンスは他の方法とほとんど同じです)
echo(get_post_field('post_content',302));
get_post
と$post_object->post_content
を使った解決策を使うことができますが、そのpostオブジェクトを使う前に必ずチェックを追加してください:
function get_post_content( $post_id = null ) {
$post_object = get_post( $post_id );
if ( ! $post_object ) { return ''; }
//else
return apply_filters('the_content', $post_object->post_content);
}
echo get_post_content( $other_post_id );
get_post_data()
関数を使って、ループの外にポストを置くことができます。このコードをfunctions.phpに配置してください。
function get_post_data($postId) {
global $wpdb;
return $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID=$postId");
}
そして、このスニペットを追加してプロセスをさらに制御します。
<?php $data = get_post_data(302);
echo $data->post_date; // post date
echo $data->post_title; // post title
echo $data->post_content; // post content
echo $data->comment_count; // comments number
?>