web-dev-qa-db-ja.com

Single.phpの<! - more - >の前にテキストをスタイルする

リンク前のコンテンツのスタイルを変更したいのですが、single.phpを使用します。

もっと具体的に言うと、ホームページ上の私の投稿はすべて要約しかなく、その他のテキストはmoreタグの使用により切り取られています。それで、「もっと読む」をクリックすると、以前にホームページで見た要約から始めて、完全な投稿を見ることができます。私はこの要約を他のテキストと区別して、たとえば大胆に付け加えて、彼に既に読んだものをユーザーに見せたいと思います。

残念ながら、これは不可能だと思います。それは...ですか ?

4
koskoz

使用: http://codex.wordpress.org/Function_Reference/the_content#Overriding_Archive.2FSingle_Page_Behavior

そして$ strip_teaserパラメータ: http://codex.wordpress.org/Function_Reference/the_content#Usage

single.phpでは、<?php the_content(); ?>を次のように置き換えます。

<?php if( strpos(get_the_content(), '<span id="more-') ) : ?>
  <div class="before-more">
  <?php global $more; $more=0; the_content(''); $more=1; ?>
  </div>
<?php endif; ?>     
<?php the_content('', true); ?>
2
Michael

これを解決するために、2つの関数を作成してthe_content()をbeforeとafter-functionに分割しました。

class MyClass
{
    /**
     * Echo the content before the <!--more--> tag
     */
    public static function getContentBeforeMore()
    {
        global $more;
        $more = false;
        the_content(false);
        $more = true;
    }

    /**
     * Echo the content after the <!--more--> tag
     */
    public static function getContentAfterMore($removeMoreTag = true)
    {
        $content = get_the_content(null, true);
        $content = apply_filters( 'the_content', $content );
        $content = str_replace( ']]>', ']]&gt;', $content );
        // Remove the empty paragraph with the <span id="more-.."></span>-tag:
        if($removeMoreTag)
        {
            $content = preg_replace('/<p><span id="more-\d+"><\/span><\/p>/m', '', $content);
        }
        echo $content;
    }
}

テンプレートでは、このように使用することができます。

<p class="intro"><?php MyClass::getContentBeforeMore(); ?></p>

... some other styling, like date or something ...

<?php MyClass::getContentAfterMore(); ?>
2
Giel Berkers