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 ()?
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
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.
<?php
if( strpos( $post->post_content, '<!--more-->' ) ) {
the_content();
}
else {
the_excerpt();
}
?>
( Crédit: MichaelH )
<?php
if( strpos( get_the_content(), 'more-link' ) === false ) {
the_excerpt();
}
else {
the_content();
}
?>
( Credit: Michael ) Fondamentalement, fait # 1 dans le sens inverse.
<?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">→</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.
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;
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/