[wp-hackers] Select pages's associated menu items in a specific menu

Mike Schinkel mikeschinkel at newclarity.net
Wed Jul 28 02:25:54 UTC 2010


Assuming I got the previous SQL correct I think this is what you are looking for:


The core of that code is here:

/* --------------------------- */
$post_id = $_GET['post'];
$menu_id = $_GET['menu'];

$term = get_term($menu_id, 'nav_menu');

$menu_items = new WP_Query(
		'post_type'   => 'nav_menu_item',
		'post_status' => 'any',
		'meta_key'    => '_menu_item_object_id',
		'meta_value'  => $post_id,
		'showposts'   => -1,
		'taxonomy'    => 'nav_menu',
		'term'        => $term->slug,
/* --------------------------- */

The key thing to notice is that the menu item post records were related both via post meta (which you figured out) but also via the "nav_menu" taxonomy by term slug (which you hadn't included.)  At first I thought it wasn't going to be possible to do it with WP_Query() but after inspecting the SQL I wrote I realized it was indeed possible, at least what I understood that you needed.

Hope this helps.


On Jul 27, 2010, at 10:02 PM, Mike Schinkel wrote:

> On Jul 27, 2010, at 8:14 PM, Lox wrote:
>> 2010/7/28 Mike Schinkel <mikeschinkel at newclarity.net>:
>>> So do you mean you have menus where a post may be referenced several times
>> Sure, but the problem is with posts that may be referenced several
> I just wanted to understand what your requirements were.  (BTW, do you frequently have menu options that point to the same post? Hmm..)
> I was struggling with what you wanted and also with the solution for what I think you are looking for so I decided to do it in "my native language" first, which would be SQL. :) 
> Can you verify that this gives you the results you are looking for?
> http://gist.github.com/493178
> Copy the raw file to test.php in the root of your site and call it like this (replacing the URL params with your values of course):
> http://example.com/test.php?menu=3&post=2
> Let me know if this is ultimately what you want (I know it's better to use the WordPress API, but we'll get there...)
> -Mike

More information about the wp-hackers mailing list