sql query to get custom menu data
-
I’m trying to use the custom menus function to create a jump-select box. That way my client can use the great admin custom-menus functionality to edit the dropdown. Using wp_nav_menu isn’t going to work cause it wraps everything in a list, but I need select/option tags. So I wrote a function to build the select list, which works fine except one thing:
Apparently when a menu item is stored in the wp_posts table, it is given a post_type=’nav_menu_item’ (or whatever, I don’t have it in front of me), but it is only given a post_title if the title has been changed from the post/page it links to. Otherwise, the post_title stays blank. I can’t figure out how to structure a query to get the title of the nav-item. Can anyone help with this? I’ll paste in the function.function jp_i_want_to_menu ($menuName) { global $wpdb; $pDB = $wpdb->posts; $itemsWant = $wpdb->get_results(" SELECT $pDB.post_title, $pDB.guid FROM $pDB INNER JOIN wp_term_relationships ON wp_term_relationships.object_id = $pDB.ID WHERE post_type = 'nav_menu_item' AND wp_term_relationships.term_taxonomy_id = ( SELECT wp_terms.term_id FROM wp_terms WHERE wp_terms.slug = $menuName) ORDER BY $pDB.menu_order ASC; "); if($itemsWant) { foreach($itemsWant as $item) echo '<option value="' . $item->guid . '">' . $item->post_title . '</option>'; } }
-
how about this?
function jp_i_want_to_menu ($menuName) { global $wpdb; $pDB = $wpdb->posts; $itemsWant = $wpdb->get_results(" SELECT p2.post_title, p2.guid FROM $pDB p1 INNER JOIN wp_term_relationships AS TR ON TR.object_id = p1.ID INNER JOIN wp_postmeta AS PM ON pm.post_id = p1.ID INNER JOIN $pDB AS p2 ON p2.ID = PM.meta_value WHERE p1.post_type = 'nav_menu_item' AND TR.term_taxonomy_id = ( SELECT wp_terms.term_id FROM wp_terms WHERE wp_terms.slug = $menuName) AND pm.meta_key = '_menu_item_object_id' ORDER BY p1.menu_order ASC "); if($itemsWant) { foreach($itemsWant as $item) echo '<option value="' . $item->guid . '">' . $item->post_title . '</option>'; } }From what I can tell making a custom menu adds extra (empty) rows in wp_posts ($pDB) that references the “real” page in the wp_postmeta table. So I inner joined the wp_postmeta table to your original query so it can get the original post data and not the added (empty) row data.
The topic ‘sql query to get custom menu data’ is closed to new replies.