web-dev-qa-db-ja.com

メニューIDで投稿を取得する

私はちょっとここで立ち往生しています。私はそれにいくつかの記事をWordpressのメニューがあります。私が欲しいのは、すべての投稿をオブジェクトとして取得することです。

私はかなり近いと思いますが、SQLクエリは思ったようには動作しません。

これは私がこれまでに持っているワットです:

$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);

私はそれがばかげた小さなSQLロジックエラーであると確信しています、しかし私は本当にそれを見つけることができません..

4
Jules

私は最近同じものを必要としていました、私はカテゴリーのメニューを持っていました、そして私はメニューのカテゴリーを得る必要がありました。 WPコアを掘り下げて数時間後、私は wp_get_nav_menu_items() 関数を見つけました。

私は最終的にこれで来ました、220は私のmenu_idでした

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

あなたが投稿のナビゲーションメニューを持っているのであれば、私はあなたが同じことができると思います、このような何かが動作するはずです -

$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..
    }

複雑なmySQLクエリを節約できると思います。

3
Maor Barazany

ナビゲーションメニューをオブジェクトとして取得する関数があります。 wp_get_nav_menu_object() - アイテム(投稿)はオブジェクト内にあり、アクセス可能です。

4
kaiser