Pb lors de la creation d’un menu horizontal sur la base des categories

  • Statut : non résolu
9 sujets de 1 à 9 (sur un total de 9)
  • Auteur
    Messages
  • #449497
    alex
    Participant
    Initié WordPress
    10 contributions

    Bonjour,

    Je souhaite personnaliser mon menu en remplacant dans le menu horizontal, les pages par les categories.

    Pour afficher les categories aucun pb (cf voir le code du header)
    Maintenant je souhaite filtrer les categories que je souhaite voir s’afficher dans le header, pour cela j’ai ajouté une variable dans la structure de wp_categories, le field suivant : category_menu bigint(20)

    Dans mon post de la category je declare la valeur 1 ou 0 pour decider si je souhaite afficher ou non la categorie dans le menu horizontal.

    Pour exclure correctement les categories de la liste il est possible d’utiliser dans la fonction wp_list_cats() le parametre exclude=, exemple exclude=’1,2′ pour ne pas afficher dans la liste les categories 1 et 2

    Mon probleme : il y a une erreur dans le codage de ma fonction get_excluded_category() présente dans template-functions-category.php. exclude est tjrs vide .. sniff

    Merci
    😉

    Code dans header.php:


      < ?php
      $cat_excluded = get_excluded_category();
      wp_list_cats(‘sort_column=category_nicename&children=0&exclude=’.$cat_excluded);
      ?>

    code dans template-functions-category.php:


    function get_category_menu()
    {
    global $wpdb;
    $query = “SELECT cat_ID FROM wp_categories WHERE category_menu=0”;
    return $wpdb->get_results($query);
    }

    function get_excluded_category()
    {
    $excluded_category=get_category_menu();
    $cat_excluded = “”;
    if ($excluded_category) {
    foreach ($excluded_category as $cat) {

    $cat_excluded_ID = $cat->cat_ID;
    $page_category_menu = $cat->category_menu;

    if ($page_category_menu == “0” ) {
    $cat_excluded =”‘”;
    $cat_excluded .= $cat_excluded_ID;
    $cat_excluded .= “,'”;

    }
    }
    }
    return $cat_excluded;
    }

    #585321
    xavier
    Gestionnaire du forum
    Maître WordPress
    2126 contributions

    Pourquoi ne pas mettre directement les id des catégories exclues dans l’appel wp_list_cats() ?
    Rajouter une ligne à la table, je trouve ça un peu poussé, non ?

    #585322
    alex
    Participant
    Initié WordPress
    10 contributions

    oui je suis d’accord mais l’idee est de pouvoir afficher dans le menu qlqs categories et dans la sidebar toutes les categories.

    Mon pb en fait c’est ma boucle dans function get_excluded_category()

    function get_category_menu()
    {
    global $wpdb;

    $query = “
    SELECT cat_ID
    FROM $wpdb->categories
    WHERE category_menu= 0
    “;

    $categories = $wpdb->get_results($query);

    return $wpdb->get_results($query);
    }

    function get_excluded_category()
    {
    $excluded_category=get_category_menu();

    $cat_excluded = “”;
    if ($excluded_category) {
    foreach ($excluded_category as $cat) {

    $cat_excluded_ID = $cat->cat_ID;
    $page_category_menu = $cat->category_menu;

    if ($page_category_menu == “0” ) {
    $cat_excluded =”‘”;
    $cat_excluded .= $cat_excluded_ID;
    $cat_excluded .= “,'”;

    }
    }
    }
    return $cat_excluded;
    }

    j’aimerai obtenir un $cat_excluded = ‘1,2’; pour ensuite filtrer en affichage via exclude de

    wp_list_cats(‘sort_column=category_nicename&children=0&exclude=’.$cat_excluded);

    #585323
    AmO
    Participant
    Maître WordPress
    4452 contributions
    alex wrote:
    oui je suis d’accord mais l’idee est de pouvoir afficher dans le menu qlqs categories et dans la sidebar toutes les categories.

    Bah tu fais appel 2 fois à la meme fonction avec des params différents ?

    #585324
    Many
    Membre
    Maître WordPress
    1485 contributions
    AmO wrote:
    alex wrote:
    oui je suis d’accord mais l’idee est de pouvoir afficher dans le menu qlqs categories et dans la sidebar toutes les categories.

    Bah tu fais appel 2 fois à la meme fonction avec des params différents ?

    Moi je procède ainsi sur un blog. Je fais appel à la même fonction plusieurs fois avec des paramètres différents et ça fonctionne très bien. Par contre le côté moins pratique c’est qu’à chaque fois que tu créé une nouvelle catégorie il faudra spécifier l’ID dans la partie où elle est à exclure. Mais comme tu n’as que le menu horizontal je pense que c’est gérable.

    #585325
    alex
    Participant
    Initié WordPress
    10 contributions

    Je ne trouve pas mon erreur

    function get_category_menu()
    {
    global $wpdb;

    $query = “
    SELECT cat_ID
    FROM $wpdb->categories
    WHERE category_menu= 0
    “;

    $categories = $wpdb->get_results($query);

    return $wpdb->get_results($query);
    }

    function get_excluded_category()
    {
    $excluded_category=get_category_menu();
    //$cat_excluded_ID = $excluded_category[0]->cat_ID;
    $i = 0;
    foreach ($excluded_category as $cat)
    {
    if ( 0 < $i )
    {
    $cat_excluded_ID = $cat->cat_ID;
    $cat_excluded =”‘”;
    $cat_excluded .= $cat_excluded_ID;
    $cat_excluded .= “,'”;
    }
    ++$i;
    }
    return $cat_excluded;
    }

    $cat_excluded; correspond à la derniere valeur de la base = à 0 soit dans 11 sur 12 (j’ai pour l’instant 12 categories)
    en fait je souhaite avoir $cat_excluded = “5,6,11” par exemple ou les valeurs pour cat_ID (5,6,11) pour category_menu sont = 0

    merci

    #585326
    Many
    Membre
    Maître WordPress
    1485 contributions

    Je comprend que l’on veuille résoudre à tout prix un problème, c’est comme ça qu’on apprendre. Mais si jamais tu changes d’avis, il y a plus simple 😉

    http://codex.wordpress.org/Template_Tags/list_cats

    #585327
    alex
    Participant
    Initié WordPress
    10 contributions

    Merci Many
    mais j’ai l’impression que ce que tu me presentes est equivalent à wp_list_cats que j’utilise déja.

    <?php list_cats(FALSE, '', 'ID',
    ‘asc’, ”, TRUE, FALSE,
    FALSE, FALSE, TRUE,
    FALSE, FALSE, ”, FALSE,
    ”, ”, ‘1,33’,
    TRUE); ?>

    Mon probleme reste car meme si j’utilise list_cats, comment je fais pour renseigner exclude =’1,33′ ici dans l’exmple, c’est a dire exclure les categories 1 et 33.
    Je ne souhaite pas indiquer dans le code manuellement les categories à exclure, mais venir lire dans la base l’etat de la categorie, voila pourquoi j’ai ajouter la variable category_menu à wp_categories.
    Quand je rentre une new categorie, je lui indique alors si je souhaite ou non la voir publié dans le menu,
    si oui => valeur de category_menu = 1.
    si non => valeur de category_menu = 0.

    Ensuite j’utilise
    wp_list_cats ou list_cats (peut importe), je renseigne les valeurs à exclure, soit par exemple toutes les valeurs egale à 0.
    A la fin il me faut donc un exclude = ‘1,33’ (cf exemple)

    donc pour resumer le pb se trouve non pas dans la fonction list_cat ou wp_list_cats
    mais uniquement dans la constrution de $cat_excluded

    Merci

    #585328
    Many
    Membre
    Maître WordPress
    1485 contributions

    ah oki ! Ca serait en effet plus pratique que de les rentrer manuellement. L’idée est intéressante, mais encore hors de mes compétences malheureusement. D’autres pourront surement t’aider mieux que moi 🙂

9 sujets de 1 à 9 (sur un total de 9)
  • Vous devez être connecté pour répondre à ce sujet.