Intereting Posts
Как автоматически добавлять и показывать (открывать) все атрибуты продукта? Продать один уникальный товар с Woocommerce? проблема с разбиением на страницы в пользовательских постоянных ссылках Добавить пользовательскую таксономию, которая представляет собой текстовый виджет Не удается найти хук, который меняет значение__состояния () Получить текущий номер страницы получить последние 5 сообщений и конкретную запись и отсортировать в определенном порядке Как добавить параметр orderby для сортировки по категории.php Есть ли плагин для защиты загрузок с помощью recaptcha? Исключение сообщений из категории, но только если они не входят в несколько категорий Как orderby meta_value_num с знаком доллара ($) Использование slug страницы в wp_query Заказ по Пользовательской дата поля не признан Создайте страницу, которая будет использоваться для создания настраиваемого типа сообщения Удаление сценариев для всех страниц, кроме главной страницы

Добавление пользовательского текста в заголовки элементов из wp_nav_menu ()

Мне нужно добавить что-то после каждого заголовка определенного меню, вызванного wp_nav_menu ()

Я пытался

add_filter('wp_nav_title', 'testing_stuff'); 

с

 function testing_stuff() { $item->title = $item->title . ' testing'; return $item->title; 

}

без каких-либо успехов, я недостаточно знаком с подключением.

Моя цель :

  • когда я вызвал меню ID = 4;
  • для каждого заголовка каждого элемента
  • я вытаскиваю данные из текущей метатеги страницы с помощью $ meta_value = get_post_meta ($ post-> ID, $ meta_key, true);
  • Я добавляю эти данные после текста привязки в

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

Я был бы признателен за любую подсказку, которая заставит меня идти по правильному пути.

Спасибо.

Solutions Collecting From Web of "Добавление пользовательского текста в заголовки элементов из wp_nav_menu ()"

Следующие работы, но со следующими оговорками. Он будет запускаться для каждого меню , но он не будет работать для wp_page_menu , обычного обратного вызова по умолчанию, если меню не может быть найдено.

Наконец, пункты меню не являются необходимыми страницами – поэтому вы можете захотеть сделать некоторую логику, чтобы проверить, что пункт меню, с которым вы имеете дело, – это страница / сообщение, из которого вы хотите получить метаданные.

Вот код:

 add_filter( 'wp_setup_nav_menu_item','my_item_setup' ); function my_item_setup($item) { //Use the following to conduct logic; $object_id = (int) $item->object_id; //object ID. $object_type = $item->type; //Eg 'post_type' $object_type_label = $item->type_label; //Eg 'post' or 'page'; //You could, optionally add classes to the menu item. $item_class = $item->classes; //Make sure $item_class is an array. //Alter the class: $item->classes= $item_class; //Alter the title: $pack_meta_value = get_post_meta($object_id, 'test', true ); if($pack_meta_value ){ $item->title = $item->title.'<span>' . $pack_meta_value . '</span>'; } return $item; } 

Мне было бы интересно узнать, есть ли лучший способ сделать это, предпочтительно метод, который позволил вам проверить, для какого меню эти элементы предназначены для …


Я переместил это из комментариев. Если вы хотите ограничить эту функцию определенным меню, вы можете попробовать следующее. Это не было проверено .

Сначала удалите add_filter из приведенного выше кода. Вместо этого вставьте в функцию, которая добавляется на более ранний крючок, и условно добавляет фильтр (скажем, когда меню является «основным»):

 add_filter( 'wp_nav_menu_args','add_my_setup_function' ); function add_my_setup_function($args) { if( $args['theme_location'] == 'primary' ): add_filter( 'wp_setup_nav_menu_item','my_item_setup' ); endif; return $args; } 

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

 add_filter('wp_nav_menu_items','remove_my_setup_function', 10, 2); function remove_my_setup_function( $nav, $args ) { remove_filter( 'wp_setup_nav_menu_item', 'my_item_setup' ); return $nav; } 

Благодаря Стивену: это рабочая форма кода (я удалил опции, которые я не использую из оригинального предложения). Я просто проверяю, есть ли не пустое значение для мета значения, поэтому я не распространяю пустое содержимое на html.

 function packaging_setup($item) { //Alter the title: $ala_page = get_page_by_title( $item->title ); // getting the page itself $ala_page_id = $ala_page->ID; // the page ID the item is refering to $pack_meta_key = 'box_packaging_meta'; // my meta key $pack_meta_value = get_post_meta($ala_page_id, $pack_meta_key, true ); // getting data if (!empty($pack_meta_value)) { //so I do not add empty spans $item->title = $item->title.'<span>' . $pack_meta_value . '</span>'; //altering } return $item; } add_filter('wp_setup_nav_menu_item', 'packaging_setup');