Intereting Posts
Функция WP, дублирующая содержимое тела как добавить значок дома вместо текста в WordPress меню Как я могу создать виджет области виджета, используя встроенные функции WordPress? Переименуйте загрузку изображений, заменив «width» и «height» в имени файла «medium», «large», «small», TED говорит, что короткий код не работает Получайте контент из-за пределов цикла с удобством использования кода для плагинов Можно ли выводить сообщения с коротким кодом? Как изменить wp-include, не нарушая мою установку wordpress? Обертывание вокруг add_filter Использование оператора switch для изменения изображения в соответствии с последней цифрой идентификатора темы WordPress Ajax Всегда возвращается 0 Pagination – ссылка на базовую страницу – Страница 1 Как выполнить запрос с помощью get_posts () для сообщений с любым тегом С плагином Yoast SEO, можно ли сделать мета-описание обязательным полем формы? Выходное значение richtext metox

Как добавить идентификаторы элементов текущего, родительского и предкового объектов в body_class ()?

(просто получил рекомендацию опубликовать это здесь из переполнения стека …)

Я только начинаю с WordPress (исправление от Joomla) – с небольшими трудностями приступить к работе.

Одна вещь, которую я пытаюсь сделать, – создать пользовательский плагин, который позволяет пользователю добавлять пользовательские фоны на сайт на основе активного элемента меню.

Так что я пытаюсь сделать, это получить активный id меню (например, «menu-item-xx», который добавлен в nav li) и активный идентификатор родительского меню, чтобы я мог добавить их в классы тела.

Это что-то, что я могу получить от чего-либо, встроенного в WordPress, или это что-то, что мне нужно, чтобы сделать заказ?

Любые указатели наиболее приветствуются …

ОБНОВИТЬ

Я решил это сейчас с помощью специальной функции, которую вы можете найти ниже

Из моего комментария ранее: используйте body_class() в файле header.php или где бы вы ни были тегами тела, например <body <?php body_class(); ?>> <body <?php body_class(); ?>> . Это даст вам результат с кучей классов на теле, которые вы затем сможете использовать в своем CSS. Например, <body class="page page-id-114 page-parent page-template-default logged-in admin-bar"> . Вы также можете использовать фильтр body_class для добавления дополнительных классов. Если вы хотите добавить slug, например, вы будете global $post а затем используйте $post->post_name .

Я попытался получить пул страниц, но он, кажется, пуст в wp_head, но вы можете получить идентификатор страницы и присвоить его классу body следующим образом:

 add_action('wp_head', 'bodyclassReplacer'); function bodyclassReplacer() { global $wp_query; $thePostID = $wp_query->post->ID; echo str_replace('<body>', '<body class="page'. $thePostID .'">', '<body>'); } 

,
После того, как вы получили класс, вы можете назначить фоновый код с помощью css следующим образом:

 body.page6 { background:url("images/background6.png") no-repeat; } 

,
пс. это было весело найти решение 🙂 – надеюсь, это поможет,
приветствия, Sagive

, Что касается выделения динамического меню – вот код, который бы сделал это:

 add_filter( 'nav_menu_css_class', 'additional_active_item_classes', 10, 2 ); function additional_active_item_classes($classes = array(), $menu_item = false){ if(in_array('current-menu-item', $menu_item->classes)){ $classes[] = 'active'; } return $classes; } 

Хорошо, я высказал свою задачу для достижения этой цели. Я нахожусь в самом начале моего путешествия с WordPress, поэтому я не уверен в качестве или эффективности этого кода. Но вот это: –

 function get_active_menu_item_ids( $classes ) { //set up defaults for menu retrieval $dosmenudefaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'container_id' => '', 'menu_class' => 'menu', 'menu_id' => '', 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>', 'depth' => 0, 'walker' => '', 'theme_location' => '' ); $dosargs = wp_parse_args( $dosargs, $dosmenudefaults ); $dosargs = apply_filters( 'wp_nav_menu_args', $dosargs ); $dosargs = (object) $dosargs; // Get the nav menu based on the requested menu $dosmenu = wp_get_nav_menu_object( $dosargs->menu ); // Get the nav menu based on the theme_location if ( ! $dosmenu && $dosargs->theme_location && ( $doslocations = get_nav_menu_locations() ) && isset( $doslocations[ $dosargs->theme_location ] ) ) $dosmenu = wp_get_nav_menu_object( $doslocations[ $dosargs->theme_location ] ); // Get the first menu that has items if we still can't find a menu if ( ! $dosmenu && !$dosargs->theme_location ) { $dosmenus = wp_get_nav_menus(); foreach ( $dosmenus as $dosmenu_maybe ) { if ( $dosmenu_items = wp_get_nav_menu_items($dosmenu_maybe->term_id) ) { $dosmenu = $dosmenu_maybe; break; } } } // If the menu exists, get its items. if ( $dosmenu && ! is_wp_error($dosmenu) && !isset($dosmenu_items) ) $dosmenu_items = wp_get_nav_menu_items( $dosmenu->term_id ); $dosmenu = $dosmenu_items; // Get the $menu_item variables _wp_menu_item_classes_by_context( $dosmenu ); //create empty parents array $dosparents = array(); //Iterate through the menu items and get the active item and its parent items foreach ($dosmenu as $dosmenuitem) { if ($dosmenuitem->current == '1') { $dosactivemenuids['current']= $dosmenuitem->ID; } if (($dosmenuitem->current_item_parent == '1')||($dosmenuitem->current_item_ancestor == '1')) { $dosparents[$dosmenuitem->menu_order] = $dosmenuitem->ID; } if(is_array($dosparents)) { krsort($dosparents); foreach ($dosparents as $key =>$value) { $dosactivemenuids['parents'][$key]= $value; } } } //return $dosactivemenuids; if (is_array($dosactivemenuids['parents'])) { foreach ( $dosactivemenuids['parents'] as $key=>$value) { $classes[] = 'menu-item-'.$value; } } if ($dosactivemenuids['current'] != '') { $classes[] = 'menu-item-'.$dosactivemenuids['current']; } return $classes; } 

Вы добавляете это к вашим функциям templates «functions.php», а также где-нибудь после того, как функция добавляет фильтр, чтобы вызвать его:

 add_filter( 'body_class', 'get_active_menu_item_ids'); 

Что это значит?

То, что это делает, это получить активные идентификаторы меню и добавить их в классы тела в порядке возрастания

Зачем мне это нужно?

Исходя из фона CMS, я использую страницы, определяемые меню. С помощью этой функции к элементам тела добавляются активный идентификатор элемента меню и / или его родительский элемент, чтобы вы могли добавлять стили на основе страницы в зависимости от активного элемента меню. Так, например, у вас может быть такая структура меню, как:

-> меню пункт-1

-> меню пункт-2

-> -> меню пункт-3

Используя эту функцию, если вы просматриваете страницу «menu-item-3», «menu-item-2» и «menu-item-3» классов добавляются в тег body в этом порядке . Это означает, что у вас может быть правило css, которое нацелено на body.menu-item-3, которое может вернуться к правилу своих родительских элементов в body.menu-item-2 и, в конечном счете, к телу, если для этого нет стилей. Например, для этого используется цвет фона по умолчанию для всей страницы (тела) для всей страницы, когда элемент меню-2 активен (body.menu-item-2) и различный цвет фона для страницы, когда элемент меню-3 активен (body.menu-item-3).

Надежда, которая помогает кому-то;)

Хорошо, мой последний снимок был недавно, и я был немного новичком – теперь я смотрю на это и его смущающе! Тогда я действительно не получил WordPress!

Это то, что вам нужно…

 function ics_get_active_menu_item_ids(){ $menus = wp_get_nav_menus(); $menu_menu_items = array(); $current_menu_items = array(); $current_menu_items['parents'] = array(); $current_menu_items['ancestors'] = array(); foreach($menus as $menu) { $menu_menu_items[] = wp_get_nav_menu_items($menu->term_id); } foreach ($menu_menu_items as $menu_items) { foreach($menu_items as $menu_item) { if ($menu_item->current == 1) { $current_menu_items['current'] = $menu_item->ID; } if ($menu_item->current_item_parent == 1) { $current_menu_items['parents'][] = $menu_item->ID; } if ($menu_item->current_item_ancestor == 1) { $current_menu_items['ancestors'][] = $menu_item->ID; } } } $current_menu_items['parents'] = array_values(array_unique($current_menu_items['parents'])); $current_menu_items['ancestors'] = array_values(array_unique($current_menu_items['ancestors'])); return $current_menu_items; } 

возвращает текущий идентификатор элемента вместе с родителями и предками;)