web-dev-qa-db-ja.com

The_content()とget_post()の違いは?

私はテーマの調整に取り組んでおり、投稿の内容を爆発させてテキストを削除する必要があります。次のコードは私が使っているものです。

$custom_Get_Post_Title = explode('|',get_post()->post_content);
echo "<h4>" . $custom_Get_Post_Title[0] . "</h4>";              
echo "<p>" . $custom_Get_Post_Title[1] . "</p>";

もともと、開発者はフォローのコードを使って投稿内容を表示していましたが、データを爆発させるのは困難でした。

global $post;
setup_postdata($post);
the_content();

私の質問 :両方とも投稿内容を取得するこれら二つの方法の違いは何ですか?

2
thatsgreyt

post_contentは、 WP_Post オブジェクトの プロパティ です。 WP_Postは、データベースからの投稿データを表すオブジェクトです。そのためpost_contentにはデータベースに保存されている生のコンテンツが含まれています。

the_content() は現在の投稿の内容を表示するテンプレートタグです。 '現在の投稿'は、関数の実行時にグローバル$post変数が設定されているものです。グローバル$post変数は通常while( have_posts() ) : the_post();を使って The Loop 内に設定されます。

重要な違いは、the_content()が生のコンテンツを表示用に準備するいくつかのフィルタを通して処理することです。これらは、段落タグの追加、ビデオなどの埋め込み用のURLへの変換、スマート引用符などへの引用などの記号の変換などを行います。多くのプラグインは、共有ボタンなどを追加するためにもこのフィルタを使用します。

そのため、post_contentをエコーするだけでは、おそらく正しく表示されません。手動でthe_contentフィルターを適用することによって、生データに対するthe_content()の出力を模倣することができます。だからあなたの例ではあなたがするだろう:

$post = get_post();

$split_content = explode( '|', $post->post_content );

echo '<h4>' . $split_content[0] . '</h4>';              
echo apply_filters( 'the_content', $split_content[1] );
4
Jacob Peattie

get_post()global $postと同じです

the_content()のような関数はループの内側でのみ使用できます。

setup_postdata()関数はそれらの関数を利用可能にするために使うことができます。

一番上の例は、次のように書き直すことができます。

gloabl $post;
$custom_Get_Post_Title = explode('|',$post->post_content);

あるいは、一番下の例と同じようなことをすることができます。

global $post;
// setup_postdata($post); <- not really needed
$theContent = get_the_content($post->ID); // can used post-id to retrieve specific
$custom_Get_Post_Title = explode('|',get_post()->post_content);
3
admcfajn