Как я могу определить, активен ли пункт меню WordPress?

Я использую WordPress для создания меню и пытаюсь использовать object_id определить, активен ли пункт меню. Проблема в том, что когда я устанавливаю menu-item-object-id вручную, это переопределено его собственным ID,

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

function create_menu($menu) {

foreach($item in $key => $menu['items']) {
create_menu_item($item, $key, $menu['id']);
}
}

function create_menu_item($item, $position, $menuID) {

// i'll use a dynamic value for the object id, but not even hard coding it works
$args = [
'menu-item-position' => $position,
'menu-item-title' =>  (isset($item['title'])) ? $item['title'] : null,
'menu-item-classes' => (isset($item['classes'])) ? $item['classes'] : null,
'menu-item-url' => (isset($item['url'])) ? $item['url'] : null,
'menu-item-status' => (isset($item['status'])) ? $item['status'] : 'publish',
'menu-item-parent-id' => (isset($item['parent'])) ? $item['parent'] : 0,
'menu-item-object-id' => '5'
];

wp_update_nav_menu_item($menuID, 0, $args);
}

Кажется, все работает, как ожидалось, за исключением menu-item-object-id имущество! Я вручную устанавливаю это как идентификатор объекта, но когда я использую wp_get_nav_menu_items() $post->object_id всегда совпадает со своим собственным идентификатором, $post->ID,

function get_menu() {

global $post;

$menu = wp_get_nav_menu_items('primary');

foreach($menu as $item) {

// $item->object_id should now be '5' but instead it is equal to $item->ID so I am unable to check if it's active

if($item->object_id == $post->ID) {
// item is active
}
}

return $menu;
}

Почему мой menu-item-object-id свойство перезаписывается?

0

Решение

Это на самом деле не интуитивно и нигде не задокументировано, но решение было установить post_type как menu-item-type а также menu-item-object в page,

$args['menu-item-type'] = 'post_type';
$args['menu-item-object'] = 'page';
$args['menu-item-object-id'] = $page->ID;

Как только вы установите эти свойства, установите menu-item-url становится ненужным. WordPress автоматически установит URL, используя постоянную ссылку на страницу.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]