Vous n'êtes pas identifié.
Annonce
Mettez-vous à jour ! WordPress 3.3.2 est disponible en français.
Annonce 1 : Le Codex en français a besoin de vous pour avancer !
Annonce 2 : Avant de poster, n'oubliez pas de faire une petite recherche et de lire les règles de ce forum.
Annonce 3 : Lisez notre blog, il regorge de bonnes informations.
Annonce 4 : Rejoignez-nous sur Facebook, Google + et sur Twitter
Pages: 1
- Index
- » Support de WordPress
- » Ne pas afficher le contenu d'une page... en l'affichant quand même
#1 04-02-2012 13:17:10
- WolverineK
- Membre WP
- Date d'inscription: 04-02-2012
- Messages: 3
Ne pas afficher le contenu d'une page... en l'affichant quand même
Bonjour,
Ma configuration WP actuelle
- Version de WordPress : 3.3.1
- Version de PHP/MySQL : 3.4.9 (j'suis pas ben sûr, là...)
- Thème utilisé : un truc hyper dépouillé, mais j'suis pas sûr du nom. Toolbox queqchose, pitête.
- Extensions en place : Akismet, Contact Form 7, Custom Upload Dir, Google Maps v3 Shortcode, Really Simple CAPTCHA, URL ShortCodes, ZdMultiLang, 11 persos, et 2-3 pas encore activées (y a besoin de les mentionner ?)
- Nom de l'hebergeur : OVH
- Adresse du site : peux pas dire (j'explique pourquoi après)
Problème(s) rencontré(s) :
D'abord, désolé de ne pas pouvoir donner l'URL du site : j'bosse pour des paranos, et tout le domaine est verrouillé, sauf pour l'équipe de développement (on est deux... grosse équipe, non ?).
Le soucis, donc (j'vais faire long, pour compenser... désolé d'avance pour les feignants de la lecture) :
J'dois afficher une page, qui a un contenu.
Ce contenu se divise en deux :
- les infos à mettre en forme,
- et les bbcodes (y en a trois).
L'un des bbcodes sert a appeller la fonction qui doit mettre le contenu en forme.
La fonction de mise en forme intercepte le bbcode, récupère le contenu de la première partie, le met en forme et envoie le tout selon ce modèle (c'est du php : les $ ne sont pas des appels jQuery) :
Code: html
add_shortcode('coo');function coo(){ return coo_thecontentl(''); }
function coo_thecontentl($thecontent) {
$before =
"<div style='width:100%;'>".
"<div style='margin:0 auto 0 auto'>".
"<div style='display:inline-block; vertical-align:top;'>".
"<div style='font-family: Gabriola, Georgia, serif; font-style:italic; font-weight:normal; font-size:18px; line-height:1.2em; margin:75px 20px 75px 5px; vertical-align:top;'>" ;
$thecontent = str_replace ( "\n" , "<br />" , str_replace ( "\r\n" , "\n" , $thecontent ) ) ;
$thecontent = str_replace ( "'" , "\'" , $thecontent ) ;
$after =
"</div>".
"</div>".
"</div>".
"</div>";
return $before.$thecontent.$after ;
}
Ce qui donne un résultat dégueu, suivant ce codage :
Code: html
<div class="entry-content">
<p>
<strong>“blablabla”</strong>
blablebli<br>
bliblablo<br>
<!-- NGT -->
<!-- NLB -->
</p>
<div style="width:100%;">
<div style="margin:0 auto 0 auto">
<div style="display:inline-block; vertical-align:top;">
<div style="font-family: Gabriola, Georgia, serif; font-style:italic; font-weight:normal; font-size:18px; line-height:1.2em; margin:75px 20px 75px 5px; vertical-align:top;">
</div>
</div>
</div>
</div>
</div>
Le p (celui que j'aimerais bien ne pas voir), est construit par le code du theme : content.php (enfin, je crois...) :
Code: html
<div class="entry-content">
<?php the_content( __( 'Continue reading <span class="meta-nav">→</span>', 'toolbox' ) ); ?>
<?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Pages:', 'toolbox' ), 'after' => '</div>' ) ); ?>
</div><!-- .entry-content -->
Donc, ma question : comment faire pour ne pas afficher le p ?
Ou faire en sorte qu'il soit vide alors que la page ne l'est pas ?
Petit blème supplémentaire : je ne peux pas utiliser une condition visant l'ID de la page (pour des raisons de portabilité du code, qui doit pouvoir être réutilisé par des gens totalement incapables de tripatouiller les fichiers php).
Perso, ça fait 2 jours que j'coince... ça doit être tout bête, mais j'vois pas...
NB : la doc wordpress sur la fonction the_content n'a pas l'air de prévoir qu'on puisse ne pas vouloir afficher le contenu...
NB2 : pour ce qui est de récupérer le contenu et l'afficher, je pense que get_the_content fera le job... mais j'suis pas certain que le p sera vide pour autant.
Dernière modification par WolverineK (04-02-2012 13:26:33)
Hors ligne
#2 04-02-2012 13:39:57
- Guy
- Blogueur
- Date d'inscription: 07-04-2011
- Messages: 6775
Re: Ne pas afficher le contenu d'une page... en l'affichant quand même
La doc de Wordpress, plus communément appelée Codex, prévoit tout ce qu'il faut pour traiter le contenu affiché, en particulier des mécanismes de hooks sur le content, tu peux donc appliquer un filtre et en faire ensuite absolument tout ce que tu veux.
Je suppose que ce que tu appelles bbcodes sont des shorcodes, il te faudra parser le contenu pour éviter de les supprimer. Si le contenu de la page est affiché une fois sans le shorcode et une fois avec , c'est que tu as un problème de codage, je n'ai pas regardé, il te faudra débugguer.
Voila, tu as tous les outils pour comprendre ce qui se passe et intervenir.
Code: html
<?php
function modifduContenu( $content ) {
return $content . "<br />ma modif";
}
add_filter(‘the_content’,'modifduContenu’);
?>
PS: en général on arrive à faire la différence entre le javascript et le PHP.
Hors ligne
#3 04-02-2012 13:51:22
- vincsb
- Bavard WP
- Date d'inscription: 11-03-2011
- Messages: 130
Re: Ne pas afficher le contenu d'une page... en l'affichant quand même
Exact, ce que tu veux faire est assez courant, scan le codex avec "enclosing shortcode" comme mot clé, cela devrai t'aider.
Hors ligne
#4 04-02-2012 14:31:48
- WolverineK
- Membre WP
- Date d'inscription: 04-02-2012
- Messages: 3
Re: Ne pas afficher le contenu d'une page... en l'affichant quand même
Ben quand j'disais qu'ça devait être tout bête...
Donc si je suis bien, plutôt que d'essayer d'encadrer le contenu de mes deux bouts de code et d'envoyer trois morcifs, faut que j'fasse les modifs sur le contenu lui-même, à la volée, pour ne renvoyer qu'un bloc...
Oki, j'tenterai ça après une bonne sieste. J'vous tiens au jus, et merci pour le décoinçage.
PS : désolé... perso, la première fois que j'ai vu des lignes jQuery dans un fofo, j'm'ai trituré les méninges un bon quart d'heure à essayer de comprendre c'que c'était que ces variables sans nom qui recevaient des paramètres, ce qui me semblait être réservé aux fonctions. Du coup, maintenant, j'précise à tous les coups.
Hors ligne
#5 04-02-2012 14:39:40
- Guy
- Blogueur
- Date d'inscription: 07-04-2011
- Messages: 6775
Re: Ne pas afficher le contenu d'une page... en l'affichant quand même
je comprends, mais si tu reçois une réponse dans un forum de quelqu'un qui confond jquery et PHP, cela ne présuppose de sa bonne volonté évidement car si il te répond, c'est qu'il veut t'aider, mais pour le reste... je me méfierai.
Hors ligne
#6 05-02-2012 18:39:00
- WolverineK
- Membre WP
- Date d'inscription: 04-02-2012
- Messages: 3
Re: Ne pas afficher le contenu d'une page... en l'affichant quand même
Pas faux. J'essaierai d'pas mettre ce genre de précision à l'avenir (même si je dois préciser que mon égo aimerait bien que je n'envisage pas d'appeler trop souvent à l'aide).
A propos, le résultat du recodage :
Code: html
add_shortcode('coo');function coo(){ return coo_short_thecontentl(''); }
function coo_short_thecontentl($thecontent) {
$short_return = apply_filters(coo_thecontentl,$thecontent);
return $short_return;
}
add_filter('the_content', 'coo_thecontentl');function coo_thecontentl($thecontent){
$before =
"<div style='width:100%;'>".
"<div style='margin:0 auto 0 auto'>".
"<div style='display:inline-block; vertical-align:top;'>".
"<div style='font-family: Gabriola, Georgia, serif; font-style:italic; font-weight:normal; font-size:18px; line-height:1.2em; margin:75px 20px 75px 5px; vertical-align:top;'>" ;
// $thecontent = str_replace ( "\n" , "<br />" , str_replace ( "\r\n" , "\n" , $thecontent ) ) ;
$thecontent = str_replace ( "'" , "\'" , $thecontent ) ;
$after =
"</div>".
"</div>".
"</div>".
"</div>";
return $before.$thecontent.$after ;
}
En clair :
- le shortcode (pouquoi diantre avais-je écrit bbcode ? La fatigue, pitêt) ne fait plus qu'appeler le filtre
- lequel fait la mise en forme (notez la mise à l'écart de la première ligne str_replace : chaque retour chariot était transformé en 2 br : une fois par le thème, une fois par mon code),
- le tout donnant ceci :
Code: html
<div class="entry-content">
<div style="width:100%;">
<div style="margin:0 auto 0 auto">
<div style="display:inline-block; vertical-align:top;">
<div style="font-family: Gabriola, Georgia, serif; font-style:italic; font-weight:normal; font-size:18px; line-height:1.2em; margin:75px 20px 75px 5px; vertical-align:top;">
<p>
<strong>“blablabla”</strong>
blablebli<br>
bliblablo<br>
<!-- NGT -->
<!-- NLB -->
</p>
</div>
</div>
</div>
</div>
</div>
Petit soucis : l'encadrement du content par la balise p, qui perturbe un peu la mise en forme de ce qui vient après. Cette balise n'est pas dans la page, mais bien ajoutée par le thème, ce qui me parait cohérent... mais en l'occurrence, me gêne.
S'il existe un truc pour la virer sans toucher au thème, j'suis preneur (sinon... ben j'adapterai ma mise en forme).
Quoiqu'il en soit, j'pense qu'on peut dire que mon soucis initial est résolu (j'sais pas s'il faut le préciser, ni qui doit, s'il y a lieu, modifier le "type" du topic).
Merci.
Hors ligne
Pages: 1
- Index
- » Support de WordPress
- » Ne pas afficher le contenu d'une page... en l'affichant quand même