- Statut : non résolu
- Ce sujet contient 30 réponses, 7 participants et a été mis à jour pour la dernière fois par
dlo, le il y a 15 années et 6 mois.
-
AuteurMessages
-
14 juillet 2007 à 9 h 27 min #604642
Je vois ce que tu veux. Je vais faire cet ajout. Ce sera une option de plus, genre MORE_TEXT au lieu de EXCERPT_TEXT.
Cela ne va pas tarder…
Cordialement
15 juillet 2007 à 17 h 37 min #604643J’attend avec impatience… toujours ma petite question sur l’ordre d’affichage cependant? comment se fait-il qu’il soit inversé (j’entend pa là décroissant) et où peu-t-on gérer ça?
merci encore.
16 juillet 2007 à 9 h 56 min #604635Voici la nouvelle version revue et améliorée.
Elle répond aux deux demandes de Sushitronic, à savoir :
1) La possibilité d’afficher le début du texte de chaque page filles et d’avoir le lien pour lire la suite.
2) Pouvoir modifier l’ordre d’affichage des pages filles.So, let’s go !
Voici le code à coller dans le fichier functions.php du thème utilisé:
post_password) ) { // if there’s a password
if ( $_COOKIE[‘wp-postpass_’.COOKIEHASH] != $pid->post_password ) { // and it doesn’t match the cookie
$text = __(‘There is no excerpt because this is a protected post.’);
return ‘<p>‘ . $text . ‘</p>‘;
}
}
$text = apply_filters(‘the_content’, $pid->post_content);
$text = str_replace(‘]]>’, ‘]]>’, $text);
$text = strip_tags($text);
$excerpt_length = 55;
$words = explode(‘ ‘, $text, $excerpt_length + 1);
if (count($words) > $excerpt_length) {
array_pop($words);
array_push($words, ‘[…]’);
$text = implode(‘ ‘, $words);
}
return apply_filters(‘the_excerpt’, $text);
}
function dlo_the_title(&$pid) {
$title = $pid->post_title;
if ( !empty($pid->post_password) )
$title = sprintf(__(‘Protected: %s’), $title);
else if ( ‘private’ == $pid->post_status )
$title = sprintf(__(‘Private: %s’), $title);
return apply_filters(‘the_title’, $title);
}
function dlo_the_permalink(&$pid) {
return apply_filters(‘the_permalink’, get_permalink($pid->ID));
}
function dlo_the_content(&$pid, $more_link_text = ‘(more…)’) {
global $preview;
$output = »;
if ( !empty($pid->post_password) ) { // if there’s a password
if ( stripslashes($_COOKIE[‘wp-postpass_’.COOKIEHASH]) != $pid->post_password ) { // and it doesn’t match the cookie
$output = get_the_password_form();
return ‘<p>‘ . $output . ‘</p>‘;
}
}
$content = $pid->post_content;
if ( preg_match(‘/<!--more(.*?)?-->/’, $content, $matches) ) {
$content = explode($matches[0], $content, 2);
if ( !empty($matches[1]) && !empty($more_link_text) )
$more_link_text = strip_tags(wp_kses_no_null(trim($matches[1])));
} else {
$content = array($content);
}
$output .= $content[0];
if ( count($content) > 1 ) {
$output = balanceTags($output);
if ( ! empty($more_link_text) )
$output .= ‘ <a>ID) . « #more-$pid->ID » class= »more-link »>$more_link_text</a>« ;
}
if ( $preview ) // preview fix for javascript bug with foreign languages
$output = preg_replace(‘/%u([0-9A-F]{4,4})/e’, « ‘&#’.base_convert(‘\1′,16,10).’;' », $output);
$output = apply_filters(‘the_content’, $output);
$output = str_replace(‘]]>’, ‘]]>’, $output);
return ‘<p>‘ . $output . ‘</p>‘;
}
function dlo_list_posts($args) {
$result = »;
if ( is_array($args) )
$r = &$args;
else
parse_str($args, $r);
$defaults = array(‘text_opt’ => ‘NONE’);
$r = array_merge($defaults, $r);
extract($r, EXTR_SKIP);
$dloposts = get_posts($args);
if (!empty($dloposts)) {
$result = ‘<div id="dlo_post_list"><ul>‘;
foreach ($dloposts as $dlopost)
$result = $result . ‘<li><a href="' . dlo_the_permalink(&$dlopost) . '">‘ . dlo_the_title(&$dlopost) . ‘</a>‘ . ($text_opt == ‘EXCERPT’ ? dlo_the_excerpt(&$dlopost) : ($text_opt == ‘CONTENT’ ? dlo_the_content(&$dlopost) : »)) . ‘</li>‘;
$result .= ‘</ul></div>‘;
}
return $result;
}
// The template tag function
function dlo_list_child_pages($id, $args = ‘text_opt=NONE’, $echo = true) {
$args = $args . ‘&post_type=page&post_parent=’ . $id;
if ( $echo )
echo dlo_list_posts($args);
else
return dlo_list_posts($args);
}
?>Ensuite, il faut créer un template pour l’affichage des pages:
<div id="content" class="narrowcolumn">
<div class="post" id="post-« >
<h2></h2>
<div class="entry">
<?php the_content('<p class="serif">Read the rest of this page »</p>‘); ?>
‘<p><strong>Pages:</strong> ‘, ‘after’ => ‘</p>‘, ‘next_or_number’ => ‘number’)); ?>
</div>
ID, ‘text_opt=CONTENT’) ?>
<?php edit_post_link('Edit this entry.', '<p>‘, ‘</p>‘); ?>
</div>
Pour le reste reste, voir mon message précédent.
Petite explication de la fonction dlo_list_child_pages($postID, $args, $echo)
Cette fonction s’utilise comme tag dans les templates et produit l’affichage les pages (pas des articles) filles d’une page mère. Il s’agit d’une liste non ordonnée comprenant le titre de la page avec le lien permanent vers celle-ci ainsi que le texte (optionnel). Cette fonction doit s’utiliser dans la boucle de lecture principale.
La fonction a 3 paramètres:$postID: L’identifiant de la page mère dont on veut afficher les filles.
$args: Une chaine de caractère comprenant les paramètres de selection et d’affichage de la liste. Cette liste est de la forme motcle1=valeur1&motcle2=valeur2.
Les mots clés possibles sont:– numberposts: un entier représentant le nombre maxi de pages à afficher (defaut=5)
– offset: un entier représentant les n premières pages à ne pas afficher (defaut=0)
– orderby: le critère de tri des pages. Les valeurs possible sont:
[q]
– post_date : par date de publication (valeur par défaut)
– post_modified : par date de modification
– post_title : par ordre alphabétique de titre
– ID : par identifiant de page
– post_author : par auteur
–post_name : par nom de page (slug)– order : Décrit l’ordre de tri. Valeurs possibles:
– ASC : Tri par ordre croissant
– DESC: Tri par ordre décroissant (valeur par défaut)– text_opt : Option d’affichage du texte de la page fille. Valeurs possibles:
– NONE : Pas de texte, seul le titre est affiché. (Valeur par défaut)
– EXCERPT : Les 50 premiers mots de la page sont affichés. Le texte est tronqué par un […] indiquant qu’il existe une suite qui est accessible en cliquant sur le titre de la page.
– CONTENT : Le texte de page est affiché à la suite du titre. Si le tag est inclu dans le texte, l’affichage se fera jusqu’à cet endroit. La suite est accessible en cliquant sur le lien (more…) qui se trouve à la fin du texte.[/q]
$echo: Valeurs possibles:
true : la liste obtenue est envoyée à l’affichage. (valeur par défaut)
false: la fonction renvoie la liste en retour mais sans l’afficher.La fonction renvoie une liste non ordonnée encadrée par des balises
…dont l’affichage est personnalisable via CSS.
Exemple de résultat:
<div id="dlo_post_list">
<ul>
<li><a href="http://mondomaine/page-mere/page-fille-2/">Page fille n°2</a><p>Ceci est le bla-bla de la page fille n°2 de la page mère</p>
</li>
<li><a href="http://mondomaine/page-mere/page-fille-1/">Page fille n°1</a><p>Ceci est la page fille n°1</p>
<a href="http://mondomaine/page-mere/page-fille-1/#more-10" class="more-link">(more…)</a></p>
</li>
</ul>
</div>Je pense qu’avec cela, la fonction devient suffisamment flexible pour s’adapter aux divers besoins. Non ? 😉
Cordialement
16 juillet 2007 à 22 h 46 min #604626gros gros gros boulot dlo… je ne saurais comment te remercier en tout cas de mon coté ça marche niquel; simplicité (enfin pour l’utilisation 😉 ), efficacité. Merci beaucoup.Si t’as besoin d’un conseil ou d’une aide sur un thème ou besoin d’un infographiste (carte de visite, logo, charte graphique… et autre dans le genre) je suis à ta disposition… parce que là je me rend compte que ça a du te prendre un temps de dingue non? pour une demande assez restreinte (yumyiam et moi)… en tout cas je suis convaincu de l’utilité de ce code… je te cite bien sûr dans ma série d’article sur WP sur mon blog 😉 (voir plus haut).
Bref merci encore 🍺 , pour moi je peux mettre ✅
17 juillet 2007 à 7 h 33 min #604625Sushitronic, je suis content que la solution te convienne et, ne t’inquiète pas, les remerciements que tu viens de m’adresser me « paient » largement pour le temps que j’ai pu y consacrer.
Allez, à la santé de ton blog, de WordPress, de l’entraide, du forum WordPress-fr, de…. (voix off: « Arrête et bois un coup ! » :boulet:) Bon, OK… à la tienne ! 🍺
Cordialement
PS: Je me pose la question de savoir s’il vaut mieux transformer ce code en plugin ou rester dans cette implémentation à inclure dans le fichier functions.php du thème. Il y a du pour et du contre dans les deux solutions. Vous avez un avis ?
28 septembre 2007 à 13 h 18 min #604644bonjour cette solution m’interresse, mais comment copier le code php sans recuperer avec, les numero de lignes.
je m’explique : quand je copie le script php pour le coller dans mon fichier functions.php par ex. et ben il me colle les code mais avec tout les numero de lignes
ex:1.
<?php
2.
/***********************************************************************/
3.
/* list_child_pages template tag /
4.
/***********************************************************************/
5.6.
excuser ma debutanterie !!😇
28 septembre 2007 à 15 h 04 min #604645C’est l’éditeur de texte utilisé pour récupérer le copier/coller qui numérote les lignes. Il faut utiliser un éditeur de texte vraiment basique, comme Notepad par exemple, pour ceux qui sont sous Windows.
Cordialement
28 septembre 2007 à 22 h 36 min #604646merci, 🙂 en fait ça marche en le collant dans word, et ensuite il faut désactiver la numérotation…
1 novembre 2007 à 23 h 51 min #604647Bonjour,
Je tente d’utiliser votre très utile solution mais je rencontre un message d’erreur php lors de l’affichage de la page :
Warning: Missing argument 1 for dlo_the_permalink() in /home/digitmade/domains/digitmade.net/public_html/wordpressfr-dm/wp-content/plugins/list_child_pages.php on line 46Comme vous le voyez j’ai copié votre code sous la forme d’un plugin. Peut-être est-ce la raison du problème, mais je ne reproduit pas cette erreur lors d’un test en local sous XAMPP.
Si vous avez une idée en tout cas merci d’avance.
Cordialement
N.B. J’utilise WP 2.3.1 sur serveur Linux avec Apache 2.2.6 et MySQL 5.0.45
5 novembre 2007 à 9 h 31 min #604648jomachi wrote:Je tente d’utiliser votre très utile solution mais je rencontre un message d’erreur phpLa fonction dlo_the_permalink() requiert un paramètre qui est l’id de la page en cours de lecture. En général, on ne fait pas référence explicitement à cette fonction mais on utilise uniquement la fonction de template dlo_list_child_pages() qui se charge d’appeler dlo_the_permalink avec les bons paramètres.
Avoir transformé cette fonction en plugin ne devrait pas poser de problème, à priori.
Cordialement
6 novembre 2007 à 17 h 32 min #604649Bonjour Dlo,
Merci pour votre réponse. Vous devriez peut-être en faire un plugin et le déposer sur le site WP, car cette fonction manque cruellement et apporte une grande souplesse à WP utilisé comme CMS. A moins que vous ayez déjà convaincu l’équipe de développement de WP d’implanter ce Template-tag dans la prochaine verison.
J’ai repris votre travail dans ce site avec succès — http://www.elisabeth-vu.com — dans la gestion des pages « Réalisations ».
Le site est en cours de réalisation donc vous pourrez tomber malheureusement pendant les périodes de développement sur une page statique sans aucun menu. Mais sinon, au menu « Réalisations » vous découvrirez plusieurs séries dont par exemple la série « Romances » qui affichera une introduction suivie des travaux. Ces travaux sont des pages filles de la page « Romances ».Donc merci encore pour cette fonction que je réutiliserais sans aucun doute dans un autre site.
Cordialement
7 novembre 2007 à 8 h 01 min #604650jomachi wrote:Donc merci encore pour cette fonction que je réutiliserais sans aucun doute dans un autre site.C’est un plaisir pour moi de voir que mon « travail » est utile à quelqu’un. 🙂
Pour ce qui est d’en faire un plugin, je vais y songer.
Cordialement
29 décembre 2007 à 8 h 14 min #604651merci dlo, moi aussi j’ai utilisé ton jeu de fonctions, qui est ce que je cherchais depuis bien longtemps
je l’ai un peu modifié (changer le ternaire en else is afin d’avoir d’autres options..) et aussi j’ai commmenté le
return ‘<p>‘ . $text . ‘</p>‘;
que j’ai remplace par un
return $text;
dans dlo_the_excerpt car il m’affichait un double
si tu as besoin de soutien pour du lobbying pour que ton model soit directement integré a WP via un tag, n’hesite pas car pour moi c’st une fonctionnalité qui manque cruélement et pourrait remplacer avantageusement le wp_list_pages tant il est restrictif.
on pourrait avoir par exemple des arguemnts pour la taille en caractere du titre, de l’excerpt, du nombre de valeur retourné, la possibilité d » extraire des custom field.. il y a vraiment de quoi faire une belle classe a partir de ta collection de function
merci encore
29 décembre 2007 à 16 h 48 min #604652c’est encore moi,
aurais tu une idée pour extraire la valeur d’un customer field via un de des function, normalement j’utilise
c2c_get_custom(‘nomducustomefield’); avec le plug in c2c d’installémais la il me retire le custom field de la page mere, pas des filles
j’ai bien essayé avant de faire un query post avec un trud du genrefunction dlo_the_showcase(&$pid) {
query_posts(‘page_id=’.$pid->ID);
$vidName = c2c_get_custom(‘showcasevideo_Name’);
$toto = ‘<p>le nom de la video est : ‘.$vidName.’ et l id du post est : ‘.$pid->ID.’<br /></p>‘;
//return GR_VideoPlayer($vidName);
return $toto;
}mais il me renvois aussi la valeur du custom field de la mere, pas de /des filles
aurais tu une idée?
merci para avance
Stephy
3 janvier 2008 à 10 h 49 min #604653Il existe un fonction native de WordPress qui permet de récupérer la valeur d’un custom field, c’est get_post_meta($post_id, $clé, $unique).
Je pense que c’est la solution la plus simple à ton problème.
Cordialement
PS: J’ai finalement transformé ce petit exercice de style en plugin et j’en ai profité pour le simplifier. J’utilise maintenant un maximum de fonctions natives de WordPress, ce qui facilitera la maintenance.
Le plugin « List Child Pages » est disponible sur mon blog… -
AuteurMessages
- Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.