Casse tête avec la taxonomie (Créer un compte)

  • Statut : non résolu
11 sujets de 1 à 11 (sur un total de 11)
  • Auteur
    Messages
  • #457565
    Lumiere de Lune
    Participant
    Maître WordPress
    20531 contributions

    Bonjour, j’ai un problème sur lequel je m’arrache les cheveux depuis ce matin, et il n’en reste plus beaucoup !

    Ma configuration WP actuelle
    – Version de WordPress : 2.3.2 avec le patch 2.3
    – Thème utilisé : Sandbox
    – Plugins en place : Beaucoup
    – Nom de l’hebergeur : 1&1
    – Adresse du site : http://www.mezgarne.com/maroc/blog/

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

    J’ai des problèmes avec la nouvelle structure de tags. J’utilise les fonctions WP en dehors du blog (en les incluant dans le header), et je génère notamment des listes de posts basés sur le « slug » de la catégorie.
    Ca marche parfaitement bien pour les catégories créées avant la migration vers la 2.3, en revanche pour celles créées après, rien…

    Voici le code initial de la fonction :

    function xlastposts ($nbpost, $leslug, $lg)

    {
    if ($lg==’fr’) {
    global $dis_blog ; // variable d’affichage en plusieurs langues
    global $voir_plus ; // variable d’affichage en plusieurs langues
    global $title_voir_plus ; // variable d’affichage en plusieurs langues
    global $post ;
    $lacat = get_cat_ID($cat_name=$leslug) ;
    $lacatnom = get_catname ($lacat) ;
    $rqpost = « ‘numberposts= ».$nbpost. »&category= ».$lacat. »‘ » ;
    $myposts = get_posts($rqpost);
    if (count($myposts) >0)
    {

    $lachaine = « <h3>« .$dis_blog[$lg]. »</h3> n » ;
    $lachaine .= « <ul> » ;
    echo ($lachaine) ;

    foreach ($myposts as $post) :
    setup_postdata($post);
    $avant = « <li><a href="".get_permalink().""> » ;
    $apres = « </a></li> n » ;
    the_title($avant, $apres) ;
    endforeach ;

    echo (« <li class="lasuite"><a href="".get_category_link($lacat)."" title="".$title_voir_plus[$lg].$lacatnom."">« .$voir_plus[$lg].$lacatnom. » » »</a></li> n » );
    echo (« </ul>« ); }
    }//fin du test sur la langue
    }

    Un exemple sur cette page : http://www.la-vallee.mezgarne.com/maroc/
    (c’est ce qui est affiché dans « Et sur le blog » et ça correspond exactement à ce que ça doit afficher)

    En revanche, sur http://www.bijoux-tiznit.mezgarne.com/maroc/ le premier « et sur le blog » correspond à une catégorie créée après la migration, et il ne la reconnait pas. Il affiche donc les cinq premiers posts du blog (qui remontent à 2 ans).

    J’ai essayé de récupérer la variable « catégorie » directement en reconstruisant la requête :

    $rqcat = « SELECT t1.name, t2.term_taxonomy_id from wp_terms AS t1, wp_term_taxonomy AS t2
    WHERE
    t1.term_id = t2.term_id AND taxonomy = ‘category’ AND slug=' ».$leslug. »‘ » ;

    $rqscat = mysql_query ($rqcat) or die (« La requete ne peut pas etre executee ») ;
    while ($laligne = mysql_fetch_array ($rqscat, MYSQL_ASSOC) )
    {
    extract ($laligne) ;
    $lacat = $term_taxonomy_id ;
    $lacatnom = $name ;
    }

    ça marche bien, il me renvoie bien la bonne id (et le bon nom), mais quand je repasse l’argument $lacat à la fonction get_posts il ne me sélectionne rien.

    Pourtant, dans le thème (sandbox), tous les appels sur la catégorie qui sont fait à partir de l’id marchent correctement, même pour les catégories toutes nouvelles. Et normalement, get-posts n’est pas déprécié ?

    J’aimerais éviter au maximum de reconstruire complètement la requête pour récupérer les posts à partir du term_taxonomy_id, ce n’est pas si difficile, mais je voudrais utiliser au maximum les fonctions globales de WP.

    Des pistes ?
    Un tag que j’aurais loupé quelque part ?
    Une nouvelle fonction cachée quelque part ?

    Merci d’avance 🙂

    #622951
    Lumiere de Lune
    Participant
    Maître WordPress
    20531 contributions

    Ahem… j’offre un soirée méchoui à celui qui me dépanne 😉

    #622952
    cyberscorp
    Participant
    Chevalier WordPress
    279 contributions

    Salut

    T’as essayé d’utiliser la classe WP_Query présente dans query.php ?

    #622953
    Lumiere de Lune
    Participant
    Maître WordPress
    20531 contributions

    C’est à dire ? faut un peu plus de détails pour le méchoui 🙂

    #622954
    cyberscorp
    Participant
    Chevalier WordPress
    279 contributions
    #622955
    Lumiere de Lune
    Participant
    Maître WordPress
    20531 contributions

    Oui j’ai essayé, ça ne donne rien non plus.

    En fait ça appelle les anciennes catégories.

    #622956
    cyberscorp
    Participant
    Chevalier WordPress
    279 contributions

    Oui.

    J’ai pas le code devant moi mais je pense avoir utilise parse_query avec des critère genre ORDERBY

    #622957
    cyberscorp
    Participant
    Chevalier WordPress
    279 contributions
    #622958
    Lumiere de Lune
    Participant
    Maître WordPress
    20531 contributions

    Bref, j’avons tout recodé moi même 🙂 ça tiendra jusqu’au prochain changement de structure, faut hoper…

    #622959
    AmO
    Participant
    Maître WordPress
    4447 contributions

    Tu peux redonner tout ton code ( a jour), pour que je puisse kan meme un coup d’oeil ?
    merci 😉

    #622960
    Lumiere de Lune
    Participant
    Maître WordPress
    20531 contributions

    Voilà, voilà…

    function xlastposts ($nbpost, $leslug, $lg)

    {
    if ($lg==’fr’) {
    global $dis_blog ;
    global $voir_plus ;
    global $title_voir_plus ;
    global $post ;

    $rqcat = « SELECT t1.name, t2.term_taxonomy_id from wp_terms AS t1, wp_term_taxonomy AS t2
    WHERE
    t1.term_id = t2.term_id AND taxonomy = ‘category’ AND slug=' ».$leslug. »‘ » ;
    $rqscat = mysql_query ($rqcat) or die (« La requete ne peut pas etre executee ») ;
    while ($laligne = mysql_fetch_array ($rqscat, MYSQL_ASSOC) )
    {
    extract ($laligne) ;
    $lacat = $term_taxonomy_id ;
    $lacatnom = $name ;
    }

    $selpost = « SELECT t4.ID, t4.post_title, t4.post_name, t4.guid FROM wp_terms AS t1, wp_term_taxonomy AS t2, wp_term_relationships AS t3 , wp_posts AS t4
    WHERE
    t1.term_id = t2.term_id AND t2.term_taxonomy_id = t3.term_taxonomy_id AND taxonomy = ‘category’ AND slug=' ».$leslug. »‘ AND t4.ID = t3.object_ID AND t4.post_status=’publish’ ORDER BY object_id DESC LIMIT 0, « .$nbpost ;
    $result = mysql_query ($selpost) or die (« La requete ne peut pas etre executee ») ;

    if (mysql_num_rows($result)>0 )
    {
    $lachaine = « <h3>« .$dis_blog[$lg]. »</h3> n » ;
    $lachaine .= « <ul> » ;
    echo ($lachaine) ;

    while ($ligne = mysql_fetch_assoc($result))
    { $lienpost = « <li><a>« .$ligne[post_title]. »</a></li> n » ;
    echo($lienpost) ;
    }

    echo (« <p class="lasuite"><a>« .$voir_plus[$lg].$lacatnom. » » »</a></p> n » );
    echo (« </ul>« );

    }
    }
    }

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