「ループ」(アーカイブページなど)に入っているとき、<!--more-->
タグが含まれているかどうかにかかわらず、どの記事を強制的にすべての記事に強制的に表示しますか。
詳細:
私は _s
テンプレート _を使用してブログ投稿コンテンツを表示するcontent.php
テンプレートから始めます。ここではthe_content()
関数を呼び出します。この関数は投稿を調べて<!--more-->
タグを見つけようとします。見つかった場合はティーザーと 続きを読む リンクを返します。見つからない場合は単純に投稿全体を出力します。
最初の部分、つまりコンテンツ作成者がそれを使用した場合は<!--more-->
タグを尊重しますが、忘れた場合はとにかく自動的にティーザー/抜粋を表示します(最初の段落または2段落など)。
これを行うための最良の方法は何ですか? the_content
フィルタ がありますが、もっとカスタマイズテキストを読むことはできません。あなたは何をお勧めします?
_編集_
そうですね、私はこれまで知りませんでしたし、@ kaiserによって大いに説明された非常に隠されたネイティブ関数get_extended()
があります 彼の答え 。私の答えは@kaiserによる答えへの拡張であるべきです
元の答え
これを行うためのネイティブ関数はありません。ここでの最善の方法は、 strpos
のようなPHP関数を使用してmoreタグを検索し、その結果に従って何かを実行することです。
あなたはこのようなことを試すことができます
if( strpos( $post->post_content, '<!--more-->' ) ) {
the_content( __( '… Read more about this article <span class="meta-nav">→</span>' ) );
}
else {
the_excerpt();
}
もちろん、コンテンツの<!--more-->
タグの前後にある部分を取得するためのAPI関数があります。 zero という命名規則のため、WPの中の便利な部分はよく見過ごされています: get_extended()
。
// In the loop, after `the_post()` filled the global `$post`:
$info = get_extended( $post );
// The resulting data is an Array:
[Array] $info
'main' => the text before the `<!--more-->`
'extended' => the content after the `<!--more-->` comment
'more_text' => the custom "Read More" text
結果は次のようになります。
if ( have_posts() )
{
while ( have_posts() )
{
the_post();
$info = get_extended( $GLOBALS['post'] );
if ( ! empty( $info['extended'] ) )
{
the_content( ! empty( $info['more_text'] ) ? $info['more_text'] : 'Read more' );
}
else
{
the_excerpt();
}
}
}
<!--more-->
の存在に基づいて抜粋と内容を切り替えます。デフォルトでは、WPはスペースなしの<!--more-->
のみを受け入れます 。あなたの作者がそれを手でタイプしてスペースを追加するならば、<!-- more -->
は(いずれにせよ)機能しません。