8791 sujets

Développement web côté serveur, CMS

Bonjour,

Je souhaiterais pour mon blog afficher un extrait (tapé manuellement) de mes articles sur la page index suivi d'un lien du style "lire la suite" comme sur l'image ci-dessous.
upload/29832-excerpt-ok.jpg

Mon problème est que, soit je ne renseigne rien dans le champ extrait et cela me génère automatiquement un extrait suivi de (...) qui en plus n'est pas cliquable, soit je tape manuellement mon extrait et dans ma page, j'inscris le code suivant:
upload/29832-code.jpg
Mais dans ce cas, cela interprète l'extrait et le lien hypertexte comme étant deux paragraphes distincts et m'affiche donc le lien en dessous et non à la fin de l'extrait. Ce qui me donne ceci.
upload/29832-excerpt-wr.jpg

Si quelqu'un connait la manip via le php ou le css, je l'en remercie d'avance.
Modifié par Monsieur stresse (17 Jun 2010 - 17:17)
Salut !

Serais t'il possible d'avoir un lien vers cette page, ou le code généré à la sortie ?

J'ai comme l'impression que ton extrait donné par :
<?php the_excerpt(); ?>

Retourne du texte entouré par des balises <p></p>
Modifié par Super_baloo8 (16 Jun 2010 - 13:52)
Les balises <p>, c'est moi qui les ai mises ds le code de ma page.

<p><?php the_excerpt(); ?><a href="<?php the_permalink(); ?>">( lire la suite )</a></p>


Mais même en les enlevant, ça ne change rien, le lien "lire la suite" est compris automatiquement dans un autre paragraphe et ne s'affiche donc pas à la fin de l'extrait comme je le souhaiterais.

Pour ce qui est du code source, ça me donne ceci

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</p>
<a href="http://localhost/monsite/le-titre-de-mon-article">( lire la suite )</a>

Modifié par Monsieur stresse (16 Jun 2010 - 16:02)
C'est bien ce qu'il me semblait !

Ta fonction "the_excerpt()" te retourne ton texte, entouré de balise de paragraphe.

Donc pour avoir le "lire la suite" en la fin de ton texte, il faut modifier la fonction "the_excerpt" pour qu'elle ne te retourne que le texte, sans les balises de paragraphes autour Smiley cligne

Edit :

Ton ancien code devait te donner ceci :


<p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</p> 
<a href="http://localhost/monsite/le-titre-de-mon-article">( lire la suite )</a>
</p> 


Ce qui n'est pas valide, car une balise <p> ne peut pas contenir une autre balise <p> !

Edit 2 :

Tu peux utiliser ce bout de code :

<?php
$texte_preview = str_replace('<p>','',the_excerpt());
$texte_preview = str_replace('</p>','',$texte_preview);
?>
<p><?php echo $texte_preview ?><a href="<?php the_permalink(); ?>">( lire la suite )</a></p> 

Modifié par Super_baloo8 (16 Jun 2010 - 16:19)
Ben merde alors, en voyant le code, j'étais persuadé que ça allait marcher et en fait non. Bien que l'effet soit toujours le même ( lien "lire la suite" ds un autre paragraphe ), maintenant le code source m'affiche, et l'extrait, et le lien entre des balises <p>.
Comme ci-dessous

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</p> 
<p><a href="http://localhost/monsite/le-titre-de-mon-article">( lire la suite )</a></p>
Ca m'affiche ceci :


[ retour_copier]<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</p>[ retour_copier]


Pour infos, le bout de code que tu m'avais donné, il est à insérer directement dans l'index, pas ds functions.php?
Modifié par Monsieur stresse (17 Jun 2010 - 10:15)
Pour information, the_excerpt est une fonction qui affiche le texte court d'un article, ca ne le renvoie pas !

Pour récupérer le contenu du texte court, il faut utiliser la fonction get_the_excerpt. Cette différence existe pour pratiquement toutes les fonctions de "templates" sous wordpress.

Le problème de vouloir supprimer les balises de paragraphes dans le texte court, c'est qu'elles sont utiles... Personnellement, mon texte court consiste toujours en une introduction de l'article, et est souvent composée de plusieurs petits paragraphes pour présenter la chose. De mon avis, supprimer toutes les balises paragraphe pour tout ré-englober dans une nouvelle est une très mauvaise idée.

Une solution qui serait sans doute plus appropriée serait de trouver la dernière occurence de </p> dans la chaine retournée par "get_the_excerpt" et d'ajouter le lien "lire la suite" juste avant.

Ceci fonctionnera sans problème :

<?php
$excerpt = get_the_excerpt();           // Le texte court
$link = ' <a href="'.get_permalink().'">( lire la suite )</a>';           // Le permalien
$lastPEnd = strripos($excerpt, '</p>');           // dernière occurence de "</p>"
echo substr($excerpt,0,$lastPEnd) . $link . substr($excerpt,$lastPEnd);           // tout ce qui se trouve avant le dernier </p> + le lien + tout ce qui se trouve après.
?>


(Notez au passage l'utilisation de get_permalink et non the_permalink qui affiche au lieu de renvoyer le permalien)

Voilà voilà
Modifié par pixelb (17 Jun 2010 - 11:37)
Ca se rapproche, ça se rapproche. SVP, ne perdez pas patience, j'ai besoin de vous.

Pixelb -> avec ton code, j'ai bien le lien et l'extrait ds un même bloc mais pas dans le bon ordre.
Ca m'affiche l'extrait comme ceci:

upload/29832-extrait2.jpg

De plus, et bien que ça n'affecte pas la lisibilité, au niveau du code, l'extrait n'est plus reconnu comme étant un paragraphe. Voici ce que ça donne pr le code source:

<a href="http://localhost/monsite/le-titre-de-mon-article">( lire la suite )</a>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua


Une idée?
Modifié par Monsieur stresse (17 Jun 2010 - 15:14)
Dans ce cas ca veut simplement dire que ce que tu récupères par "get_the_excerpt" n'est pas encadré par des balises de paragraphe... Je ne connais pas exactement les spécifications de cette fonction, mais on doit pouvoir faire quelque chose pour gérer les deux cas.

Rajoute ceci juste avant la dernière ligne que j'ai écrite précédemment (ligne echo) :

Edité
S'il n'y a pas de balise </p>, on place le marqueur en fin de chaine.


EDIT :
J'ai oublié que s'il n'y a pas de balises de paragraphe il serait peut être judicieux d'en ajouter... Smiley smile
L'ensemble suivant devrait vérifier cela...

<?php 
$excerpt = get_the_excerpt();
$link = ' <a href="' . get_permalink() . '">( lire la suite )</a>';
$lastPEnd = strripos($excerpt, '</p>');
if($lastPEnd < 1)
     echo '<p>' . $excerpt . $link . '</p>';
else
     echo substr($excerpt,0,$lastPEnd) . $link . substr($excerpt,$lastPEnd);
?> 

(je n'ai pas testé le code, une erreur de frappe a pu s'y glisser mais le principe y est)
Modifié par pixelb (17 Jun 2010 - 16:37)