web-dev-qa-db-fra.com

Existe-t-il une méthode has_more_tag () ou équivalente?

Je dois déterminer si la publication actuelle a une balise "plus". J'utilise actuellement

$pos=strpos($post->post_content, '<!--more-->');

Me manque-t-il une méthode intégrée similaire à has_excerpt ()?

5
N2Mystic

En termes simples: il n’existe pas de fonction intégrée qui fasse la même chose que votre code ci-dessus.

Contenu du bonus: Plus de tours de tag

1
Brady

Notez rapidement les codes que nous pourrions utiliser pour indiquer the_content(); si la balise More existe et the_excerpt(); si elle n’existe pas.

Code n ° 1 (recommandé)

<?php
    if( strpos( $post->post_content, '<!--more-->' ) ) {
        the_content();
    }
    else {
        the_excerpt();
    }
?>

( Crédit: MichaelH )

Code # 2

<?php
    if( strpos( get_the_content(), 'more-link' ) === false ) {
        the_excerpt();
    }
    else {
        the_content();
    }
?>

( Credit: Michael ) Fondamentalement, fait # 1 dans le sens inverse.

Code # 3

<?php
    if( preg_match( '/<!--more(.*?)?-->/', $post->post_content ) ) {
        the_content();
    }
    else {
        the_excerpt();
    }
?>

( Crédit: helgatheviking ) À utiliser uniquement dans les cas où Edge ne peut pas utiliser strpos(). Généralement, strpos() est plus efficace que preg_match().


Le rendant plus conditionnel:

<?php
    if ( is_home() || is_archive() || is_search() ) {
        if( strpos( $post->post_content, '<!--more-->' ) ) {
            the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'twentytwelve' ) );
        }
        else {
            the_excerpt();
        }
    }
    else {
        the_content();
    }
?>

Qu'est-ce que ça fait? Si la page affichée est la page d'accueil, d'archive ou de résultats de recherche, affichez the_content(); si la balise More existe, the_excerpt(); si ce n'est pas le cas et affichez simplement the_excerpt(); sur toutes les autres pages.

7
its_me

Je ne pouvais obtenir aucune des solutions fournies pour fonctionner, mais j’ai trouvé que cela fonctionnait bien pour moi, en le publiant comme solution supplémentaire si quelqu'un d'autre avait des problèmes pour le faire fonctionner. Juste tester si le contenu est le même avec et sans décapage de la bande-annonce.

        // Choose the manual excerpt if exists
        if ( has_excerpt() ) :
                the_excerpt();

        // Is there a more tag? Then use the teaser. ()
        elseif ( get_the_content('', false) != get_the_content('', true)  ) :
            global $more; 
            $more = 0;
            echo strip_tags(get_the_content( '', false ));
            $more = 1;

        // Otherwise make an automatic excerpt
        else :
            the_excerpt(40);

        endif;
1

Pour ceux qui recherchent une réponse plus WP, vous pouvez utiliser cette logique:

$info = get_extended($post->post_content);
if(!empty($info["extended"])){
   // it has a read more tag.
}else{
   // it hasn't one.
}

Pour cela, vous pouvez blâmer le WP Core s'il ne fonctionne pas correctement. :)

Référence: https://developer.wordpress.org/reference/functions/get_extended/

0
tpaksu