anjum
  • 0
Новичок

Как получить nav_menu_item_id и slug из базы данных wp

  • 0

Привет, эксперты WordPress, пожалуйста, помогите мне, я хочу получить nav_menu_item_id и slug из базы данных wp с помощью шаблона страницы, такого как (store.php), это шаблон страницы и как мы можем получить идентификатор элемента меню нефа и слаг, которые используют этот шаблон страницы

Share
  1. Привет @Анжум:

    Я думаю, что функция get_nav_menu_id_by_page_template() — это то, что вы ищете? Вы можете поместить код этой функции в functions.php файл вашей темы или в .php плагин, который вы пишете:

    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;
    }
    

    Когда у вас есть get_nav_menu_id_by_page_template() функция в вашем коде, вы можете вызвать ее в файле шаблона темы следующим образом:

    <?php $nav_menu_id = get_nav_menu_id_by_page_template('store.php'); ?>
    
    • 0
  2. Несколько страниц могут использовать один и тот же шаблон. Между шаблонами и страницами или элементами навигационного меню нет отношения 1:1, поэтому вы можете вернуть более одного элемента.

    Шаблоны и идентификаторы элементов хранятся в таблице postmeta . Ищите _menu_item_object_id и _wp_page_template .

    • 0
  3. 
    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;
    }
    

    это решение отлично работает для меня, дайте мне Рочестер Оливейра, мой вопрос о stackoverflow. Спасибо, Рочестер Оливейра.

    этот идентификатор обратного сообщения, но мне нужен идентификатор навигационного меню

    • 0

Оставить ответ

You must login to add an answer.