web-dev-qa-db-ja.com

The_contentをループの外側で使う

ヘッダーのコンテンツの最初の100ワードを取得しようとしていました。ループの最初の100ワードを取得するには、次のスニペットを使用しますが、ループの外側の値を取得することも可能です。

$cstring = get_the_content( '' );
$newcString = substr( $cstring, 0, 100 );
echo'<p>' . $newcString . '</p>';
2
Hardeep Asrani

あなたが現在いるページのためにそれをやろうとしているなら、あなたはただこれを使うことができます:

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

これにより、IDを具体的に設定する代わりに、現在の投稿のコンテンツが取得されます。

5
Nick Young

this here に関する記事を書きましたが、ここに要点の要約があります:

  • the_contentは「ループの内側」でのみ使用できます
  • 「ループ内」は、setup_postdata()およびglobal $postを呼び出すことによってのみ正しく「シミュレート」できます。
  • その後、wp_reset_postdata()を呼び出して、自分で解決する必要があります

以下のコードは、投稿IDから投稿コンテンツを取得する機能を提供します。 @ NickYoung answerとは異なり、受け取るコンテンツはnotpost_content列に格納されているものです投稿テーブルではなく、コンテンツafterではなく、the_contentフィルター(たとえば、解析されたショートコードなど)を通過しました。

コード

/**
 * Display the post content. Optinally allows post ID to be passed
 * @uses the_content()
 * @link http://stephenharris.info/get-post-content-by-id/
 * @link https://wordpress.stackexchange.com/questions/142957/use-the-content-outside-the-loop
 * @param int $id Optional. Post ID.
 * @param string $more_link_text Optional. Content for when there is more text.
 * @param bool $stripteaser Optional. Strip teaser content before the more text. Default is false.
 */
function sh_the_content_by_id( $post_id=0, $more_link_text = null, $stripteaser = false ){
    global $post;
    $post = get_post($post_id);
    setup_postdata( $post, $more_link_text, $stripteaser );
    the_content();
    wp_reset_postdata( $post );
}
6
Stephen Harris

get_page() または get_post() を使用して、ループ外のコンテンツを取得できます。

//For page
$page_id = 1;
$get_page_object = get_page( $page_id );
$page_object = $get_page_object->post_content;
echo $newpagecString = substr($page_object, 0, 100);
//For post
$post_id = 2;
$get_post_object = get_post( $post_id );
$post_object = $get_post_object->post_content;
echo $newpostcString = substr($post_object, 0, 100);
0
Maidul