0

Hi WordPress Experts please help me i want to get nav_menu_item_id and slug from wp database by given a page template like (store.php) this a page template and how we can get nave menu item id and slug that use this page template

3 Answers 3

2

Hi @Anjum:

I think the function get_nav_menu_id_by_page_template()is what you are looking for? You can place the code for this function in your theme's functions.php file, or in a .php for a plugin you are writing:

function get_nav_menu_id_by_page_template($template) {
  static $nav_menu_id;
  if (!isset($nav_menu_id)) {
    global $wpdb;
    $sql = <<<SQL
SELECT 
  menu.post_id AS menu_id
FROM 
  {$wpdb->postmeta} AS template 
  INNER JOIN {$wpdb->postmeta} AS menu_id ON menu_id.meta_key='_menu_item_object_id' 
                                         AND menu_id.meta_value=template.post_id
  INNER JOIN {$wpdb->postmeta} AS menu ON menu_id.post_id=menu.post_id
WHERE 1=1
  AND menu.meta_key='_menu_item_object' AND menu.meta_value='page'
  AND template.meta_key='_wp_page_template' AND template.meta_value='%s'
SQL;      
    $nav_menu_id = $wpdb->get_var($wpdb->prepare($sql,$template));
  }
  return $nav_menu_id;
}

Once you have the get_nav_menu_id_by_page_template() function in your code you can call it in your theme template file like so:

<?php $nav_menu_id = get_nav_menu_id_by_page_template('store.php'); ?>
12
  • I wondered if it would be faster to extend the nav menu query and let it collect the required information in an array which is accessible from the outside. +1 anyway. :)
    – fuxia
    Commented Mar 28, 2011 at 4:42
  • @MikeSchinkel i am getting an error with it Parse error: syntax error, unexpected T_SL
    – Anjum
    Commented Mar 28, 2011 at 5:11
  • @Anjum - Didi you copy my code exactly? Do you accidentally indent or put a space in front of SQL;? Commented Mar 28, 2011 at 5:45
  • @MikeSchinkel i have copied and paste your code as it is in my function.php but i am getting this error any other way to....
    – Anjum
    Commented Mar 28, 2011 at 12:24
  • @Anjum - Can you give me the entire error message? File name, Line number and all? Commented Mar 29, 2011 at 7:16
1

Multiple pages may use the same template. There is no 1:1 relation between templates and pages or nav menu items, so you may get more than one item back.

Templates and item IDs are stored in the table postmeta. Look for _menu_item_object_id and _wp_page_template.

1
  • i am using special template (store.php) for my store (shop) page how can i get menu item id and slug by this template
    – Anjum
    Commented Mar 27, 2011 at 11:26
0

function getIdFromMeta( $meta_key, $meta_value ) {
    global $wpdb;
    $pid = $wpdb->get_var( $wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_value = '$meta_value' AND meta_key = '$meta_key' ORDER BY post_id DESC") );
    if( $pid != '' )
        return $pid;
    else 
        return false;
}

it is work fine for me this solution give me Rochester Oliveira my question on stackoverflow Thanks Rochester Oliveira

this return post id but i needed nav menu id

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.