There is menu 'menu-name' on wordpress site. On wordpress I can get menu by $menu_items = wp_get_nav_menu_items( 'my-menu' ). Then in foreach loop I get url for menu item: $url = $menu_item -> url. This is url on post. This case works good.

Second I want to get the same menu items with urls via sql-query from Wordpress MySql database without wordpress method wp_get_nav_menu_items( 'my-menu' ). Because it is used from other not php wordpress project.

I found this query on internet:

SELECT p2.post_title, p2.post_name, p2.guid
                FROM wp_site.wp_posts p1
                INNER JOIN wp_site.wp_term_relationships AS TR
                ON TR.object_id = p1.ID
                INNER JOIN wp_site.wp_postmeta AS PM
                ON pm.post_id = p1.ID
                INNER JOIN wp_site.wp_posts AS p2
                ON p2.ID = PM.meta_value
                WHERE p1.post_type = 'nav_menu_item'
                AND TR.term_taxonomy_id = ( SELECT wp_site.wp_terms.term_id FROM wp_site.wp_terms WHERE wp_terms.slug = 'my-menu')
                AND wp_site.pm.meta_key = '_menu_item_object_id'
                ORDER BY p1.menu_order ASC;

But there is not url in this solution. I thought to use 'post_name' for url, but this 'post_name' isn't the same url, that I get from 'wp_get_nav_menu_items...' method. Could you help me, please? Thanks.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.