Afficher des sous-pages statique à la manière des billets de blog (Créer un compte)

  • Statut : non résolu
15 sujets de 16 à 30 (sur un total de 31)
  • Auteur
    Messages
  • #604642
    dlo
    Participant
    Maître WordPress
    1849 contributions

    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

    #604643
    Sushitronic
    Membre
    Initié WordPress
    29 contributions

    J’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.

    #604635
    dlo
    Participant
    Maître WordPress
    1849 contributions

    Voici la nouvelle version revue et améliorée. :D

    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

    #604626
    Sushitronic
    Membre
    Initié WordPress
    29 contributions

    gros 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 ✅

    #604625
    dlo
    Participant
    Maître WordPress
    1849 contributions

    Sushitronic, 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. :D

    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 ?

    #604644
    madumatt
    Membre
    Initié WordPress
    4 contributions

    bonjour 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 !!😇

    #604645
    dlo
    Participant
    Maître WordPress
    1849 contributions

    C’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

    #604646
    madumatt
    Membre
    Initié WordPress
    4 contributions

    merci, 🙂 en fait ça marche en le collant dans word, et ensuite il faut désactiver la numérotation…

    #604647
    jomachi
    Membre
    Initié WordPress
    8 contributions

    Bonjour,

    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 46

    Comme 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

    #604648
    dlo
    Participant
    Maître WordPress
    1849 contributions
    jomachi wrote:
    Je tente d’utiliser votre très utile solution mais je rencontre un message d’erreur php

    La 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

    #604649
    jomachi
    Membre
    Initié WordPress
    8 contributions

    Bonjour 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

    #604650
    dlo
    Participant
    Maître WordPress
    1849 contributions
    jomachi 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

    #604651
    freeriders
    Participant
    Initié WordPress
    14 contributions

    merci 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

    #604652
    freeriders
    Participant
    Initié WordPress
    14 contributions

    c’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 genre

    function 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

    #604653
    dlo
    Participant
    Maître WordPress
    1849 contributions

    Il 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…

15 sujets de 16 à 30 (sur un total de 31)
  • Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.