web-dev-qa-db-fra.com

Obtenir les messages par ID de menu

Je suis un peu coincé ici. J'ai un menu dans Wordpress avec quelques messages. Ce que je voudrais, c'est récupérer tous les messages en tant qu'objets.

Je pense que je suis assez proche, mais la requête SQL ne semble pas fonctionner comme je le souhaite.

C'est wat j'ai jusqu'ici:

$querystr = "
SELECT wposts.* FROM wp_posts wposts
LEFT JOIN wp_postmeta wmeta ON wposts.ID = wmeta.post_id
LEFT JOIN wp_term_relationships wrel ON wrel.object_id = wmeta.meta_value
LEFT JOIN wp_terms wterms ON wrel.term_taxonomy_id = wterms.term_id
WHERE wterms.term_id= $menu_id
";

$posts = $wpdb->get_results($querystr, OBJECT);

Je suis sûr que c'est une stupide petite erreur de logique SQL, mais je ne peux vraiment pas la trouver ..

4
Jules

J'ai eu besoin récemment de la même chose, j'avais un menu de catégories et j'avais besoin de les avoir dans le menu. Après plusieurs heures à creuser dans le noyau WP, j'ai trouvé la fonction wp_get_nav_menu_items () qui m'a aidée.

Je suis finalement venu avec cela, 220 était mon menu_id

$navcat = wp_get_nav_menu_items('220');
    foreach ($navcat as $obj) {
        $catid = $obj->object_id;
        $category = get_category($catid);
        ...
        ...
    }

Donc, si vous avez un menu de navigation de posts, je suppose que vous pouvez faire la même chose, quelque chose comme ça devrait marcher -

$nav_items = wp_get_nav_menu_items('220');  
    foreach ($nav_items as $obj) {
        $objid = $obj->object_id;
        $postobj = get_post($objid);

        //do stuff with the post..
    }

Je pense que cela peut vous épargner des requêtes mySQL complexes ...

3
Maor Barazany

Il existe une fonction pour obtenir un menu de navigation sous forme d'objet: wp_get_nav_menu_object() - les éléments (publications) sont à l'intérieur de l'objet et accessibles.

4
kaiser