ループ外から投稿コンテンツを取得する


回答:


39

を使用get_page()して$post、静的ページのオブジェクトを返すことができます。

$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;

編集

同様に、投稿のオブジェクトget_post()を返すために使用できます$post

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;

これを使用するとき、ショートコードはまだ機能しますか?
ティムバース14

わかっていないだけです。setup_postdata( $post );最初に使用し、その後使用できますthe_content();
ティムバース14

4
実行することができますapply_filters( 'the_content', $post_object->post_content );
ネイサンパウエル

6

ループの外側で投稿のコンテンツを取得するには、次のように書くことができます

global $post;
$content = $post->post_content;

if ( !empty( $content ) ) :
    echo $content;
endif;

3

コンテンツにショートコードが含まれている場合は、次を使用する必要があります。

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );

ショートコードを
Brad Dalton

そのページはdo_shortcode、「遅いかもしれない」と「短いコードが呼び出す関数を使用することができる」と言う以外に避けるべき説得力のある理由を提供していません。これらの理由は、最も単純なシナリオで最も些細な場合にのみ有効です。ショートコードが他の場所で生成された場合、または複数のショートコードがある場合、またはショートコードが他のコンテンツおよびマークアップと混在している場合、失敗します。説得力のある理由がなければ、私は避けるべき声明に同意しませんdo_shortcode。これは時期尚早な最適化のような匂いがします。
ジェフ

また、コードと元のショートコードのコードとの結合も増加します。ショートコードのバッキングメソッドの名前が変更されたり、署名が変更されたりすると、コードが破損します。
ジェフ

1

完全を期すために、上記のTimのコメントに基づいて、Stephen Harrisの記事に触発されて、使用できるソリューションthe_content()は次のとおりです。

$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );

したがって、フィルターが適用され(段落が挿入されるなど)、ショートコードが機能します。


これは私のブラウザをほとんどクラッシュさせました:/アンパサンドを取り出すのは助けますが、それでもショートコードを解析していません。
ザード

0

ターゲットの投稿ID(302)を知っているので、ループの外で使用できる便利なこの短縮構文を見つけることができます(ただし、そのパフォーマンスは他の代替方法とほとんど同じです)。

echo(get_post_field('post_content',302));

0

この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
?>

0

あなたが、などと述べ、解決策を使用することができるget_post$post_object->post_contentしていますが、そのポストオブジェクトを使用する前にチェックを追加することを忘れないでください:

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


-2

使用wp_reset_postdata();します..(編集済み)

<?php 
$args = array(
        'post_type' => 'posttype',
        'p' => 'post_id'
       );
$the_query = new WP_Query( $args );
if( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <?php the_content(); ?>
    <?php endwhile; endif; 
wp_reset_postdata();
?>

posttypeは、「post」、「page」、またはカスタムの投稿タイプです。ここで、p = 302は投稿IDです。うまくいくことを願っています。


2
query_postsページの機能を中断する必要がない限り使用しないでください。常に使用するWP_Queryget_posts、カスタムクエリに使用します:-)
Pieter Goosen

はい..あなたはそれは...同じ結果が見つけ..だけでなく..右Wp_Queryことができます
Jahirulイスラム教Mamun

pre_get_postsフィルターもありますthe_post。とても詳細。
ネイサンパウエル

-3

次のように、コンテンツをカテゴリXに配置し、query_postを前に使用できます。

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.