web-dev-qa-db-fra.com

Style le texte avant <! - more -> dans single.php

Je voudrais styler différemment le contenu avant le lien, mais dans single.php.

Pour être plus précis, tous mes messages sur la page d'accueil ont seulement un résumé, et le reste du texte est coupé grâce à l'utilisation de la balise more. Ainsi, lorsque je clique sur "Lire la suite", le message complet s'affiche, en commençant par le résumé que nous avons précédemment vu sur la page d'accueil. J'aimerais différencier ce résumé du reste du texte, en ajoutant des caractères gras, par exemple, pour montrer à l'utilisateur ce qu'il a déjà lu.

Malheureusement, je pense que ce n'est pas possible. Est ce

4
koskoz

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

et le paramètre $ strip_teaser: http://codex.wordpress.org/Function_Reference/the_content#Usage

dans single.php, remplacez <?php the_content(); ?> par:

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

J'ai résolu ce problème en créant 2 fonctions pour diviser the_content() en une fonction before et after:

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

Dans un modèle, il peut être utilisé comme ceci:

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

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

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