Tester dans quel niveau 1 d’une arbo a 3 niveau (ou plus)

  • Statut : non résolu
9 sujets de 1 à 9 (sur un total de 9)
  • Auteur
    Messages
  • #465297
    yumiam
    Membre
    Padawan WordPress
    98 contributions

    Bonjour,

    Ma configuration WP actuelle
    – Version de WordPress : 2.6

    Problème(s) rencontré(s) :

    Bonjour,

    je souhaiterai afficher dans ma sidebar, l’arborescence des pages, du niveau 1 dans lequel je me situe…
    j’ai bien trouvé ça :
    http://codex.wordpress.org/Conditional_Tags#Testing_for_sub-Pages
    < ?php
    if ( is_page(‘about’) || $post->post_parent == ‘2’ ) {
    $bannerimg = ‘home.jpg’;

    } elseif ( is_page(‘learning’) || $post->post_parent == ’56’ ) {
    $bannerimg = ‘teaching.jpg’;

    } elseif ( is_page(‘admissions’) || $post->post_parent == ’15’ ) {
    $bannerimg = ‘admissions.jpg;

    } else {
    $bannerimg = ‘home.jpg’; // Fall-through
    }
    ?>

    mais ça marche pour 2 niveaux … mais pas trois (ou 4 ou cinq……)

    Comment tester “l’ancetre” / la premiere page / le niveau 1 d’une arborescence de page …

    Merci d’avance

    #653523
    Lumiere de Lune
    Participant
    Maître WordPress
    19385 contributions

    Tu testes l’ID du parent jusqu’à ce que tu arrives à une ID de page au niveau zéro (que tu peux obtenir en faisant un list_pages() avec la bonne option sur la profondeur)
    A chaque fois que tu fais ton test, tu incrémentes un compteur dans une variable.
    Tu prends la valeur du compteur.

    #653524
    yumiam
    Membre
    Padawan WordPress
    98 contributions

    outch … merci … ça a l’air bien … mais la jsuis largué 😉
    un exemple concret ?

    #653525
    dlo
    Participant
    Maître WordPress
    1852 contributions

    Et hop, un petit code qui permet de récupérer l’id de la page ancêtre d’une page dont on fournit l’identifiant:

    function get_root_parent($page_id) {
    global $wpdb;
    	$parent = $wpdb->get_var(“SELECT post_parent FROM $wpdb->posts WHERE post_type=’page’ AND ID = ‘$page_id'”);
    	if ($parent == 0) return $page_id;
    	else return get_root_parent($parent);
    }

    Cordialement

    #653526
    yumiam
    Membre
    Padawan WordPress
    98 contributions

    si je te suis … en faisant ceci, ça devrait coller ?
    ben ça ne colle pas :(

    get_var(“SELECT post_parent FROM $wpdb->posts WHERE post_type=’page’ AND ID = ‘$page_id'”);
            if ($parent == 0) return $page_id;
            else return get_root_parent($parent);
          }
    	  
    	  
    	echo get_root_parent(“325”);
    	
    
    if ( get_root_parent ==’320′ ) { 
    wp_list_pages(“title_li=&child_of=320”);
    
    } elseif ( get_root_parent ==’282’ ) { 
    wp_list_pages(“title_li=&child_of=282”);
    
    } else { 
    
    }	
    	
    	
    ?>

    #653527
    yumiam
    Membre
    Padawan WordPress
    98 contributions

    au temps pour moi …
    c’est en faisant ça que ça colle o/
    (si je ne met pas de parametre forcement …)

    get_var(“SELECT post_parent FROM $wpdb->posts WHERE post_type=’page’ AND ID = ‘$page_id'”);
            if ($parent == 0) return $page_id;
            else return get_root_parent($parent);
          }
    	  
    	  
    	echo get_root_parent(“325”);
    	
    
    if ( get_root_parent($post->ID) ==’320′ ) { 
    wp_list_pages(“title_li=&child_of=320”);
    
    } elseif ( get_root_parent($post->ID) ==’253’ ) { 
    wp_list_pages(“title_li=&child_of=253”);
    
    } else { 
    
    }	
    	
    	
    ?>

    #653528
    dlo
    Participant
    Maître WordPress
    1852 contributions

    Euh non, c’est pas tout à fait cela… Il faut récupérer l’id de la page en cours et l’utiliser comme paramètre de la fonction get_root_parent. Un truc comme ceci:

    get_var(“SELECT post_parent FROM $wpdb->posts WHERE post_type=’page’ AND ID = ‘$page_id'”);
            if ($parent == 0) return $page_id;
            else return get_root_parent($parent);
          }
        
        
      $currentID = get_the_id();
      
     
    if ( get_root_parent($currentID) == 320 ) { 
    wp_list_pages(“title_li=&child_of=320”);
     
    } elseif ( get_root_parent($currentID) == 282 ) { 
    wp_list_pages(“title_li=&child_of=282”);
     
    } else { 
     
    } 
      
      
    ?>

    Cordialement

    [EDIT] Oupsss, je vois que tu as trouvé tout seul dans l’intervalle. C’est tout bon. [/EDIT]

    #653522
    yumiam
    Membre
    Padawan WordPress
    98 contributions

    euuh … ben … bizarrement … ma solution fonctionne chez moi … alors que la tienne non …oO
    $post->ID n’équivaut pas a ton $currentID ??
    (pour rappel … je debute hein … le php et moi …je ne suis QUE graphiste 😉

    #653529
    dlo
    Participant
    Maître WordPress
    1852 contributions

    Tout dépend du contexte dans lequel tu te trouves. Si cela fonctionne, c’est le principal. 🙂

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