WP_NAV_MENU_ITEM_TAXONOMY_META_BOX() │ WP 3.0.0
Эта функция отображает мета-блок для элемента меню таксономии.
Как использовать
Эта функция не использует хуки и возвращает null (ничего).
Аргументы функции
wp_nav_menu_item_taxonomy_meta_box( $data_object, $box );
- $data_object (string) (обязательный параметр): не используется.
-
$box (array) (обязательный параметр): аргументы мета-блока для элемента меню таксономии.
- id (string): атрибут 'id' для мета-блока.
- title (string): заголовок мета-блока.
- callback (callable): функция для отображения мета-блока.
- args (object): дополнительные аргументы для мета-блока (объект таксономии для данного мета-блока).
Пример
1. Отображение всех категорий на странице навигационного меню
В этой задаче подразумевается, что вы хотите отобразить все категории в мета-блоке, но по умолчанию функция запрашивает только 50 категорий и использует пагинацию. Чтобы обойти это ограничение, мы воспользуемся фильтром get_terms().
add_action( 'current_screen', function( $screen ) {
// Это страница редактирования меню
if ( $screen->base === 'nav-menus' ) {
add_filter( 'get_terms_args', 'view_all_category_in_metabox_menu', 10, 2 );
}
});
/**
* @param array $args
* @param string[] $taxonomies
* @return array
*/
function view_all_category_in_metabox_menu( $args, $taxonomies ) {
// Это тот запрос, который нам нужен
if ( $taxonomies === [ 'category' ] && $args['number'] === 50 ) {
$args['number'] = -1;
// Скрыть блок пагинации
add_action( 'admin_footer', function () {
?>
Заметки
- Глобальная переменная: $nav_menu_selected_id (тип: int|string)
Список изменений
- С версии 3.0.0 — функция была впервые представлена.
Код функции
Ниже приведен код функции wp_nav_menu_item_taxonomy_meta_box():
function wp_nav_menu_item_taxonomy_meta_box( $data_object, $box ) {
global $nav_menu_selected_id;
$taxonomy_name = $box['args']->name;
$taxonomy = get_taxonomy( $taxonomy_name );
$tab_name = $taxonomy_name . '-tab';
// Пагинация для большого числа объектов.
$per_page = 50;
$pagenum = isset( $_REQUEST[ $tab_name ] ) && isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 1;
$offset = 0 < $pagenum ? $per_page * ( $pagenum - 1 ) : 0;
$args = array(
'taxonomy' => $taxonomy_name,
'child_of' => 0,
'exclude' => '',
'hide_empty' => false,
'hierarchical' => 1,
'include' => '',
'number' => $per_page,
'offset' => $offset,
'order' => 'ASC',
'orderby' => 'name',
'pad_counts' => false,
);
$terms = get_terms( $args );
if ( ! $terms || is_wp_error( $terms ) ) {
echo '' . __( 'Нет элементов.' ) . '
';
return;
}
$num_pages = (int) ceil(
wp_count_terms(array_merge($args, array('number' => '', 'offset' => ''))) / $per_page
);
$page_links = paginate_links(
array(
'base' => add_query_arg(array($tab_name => 'all', 'paged' => '%#%', 'item-type' => 'taxonomy', 'item-object' => $taxonomy_name)),
'format' => '',
'prev_text' => '' . __( '«' ) . '',
'next_text' => '' . __( '»' ) . '',
'before_page_number' => '' . __( 'Страница' ) . ' ',
'total' => $num_pages,
'current' => $pagenum,
)
);
$db_fields = false;
if ( is_taxonomy_hierarchical( $taxonomy_name ) ) {
$db_fields = array('parent' => 'parent', 'id' => 'term_id');
}
$walker = new Walker_Nav_Menu_Checklist( $db_fields );
$current_tab = 'most-used';
if ( isset( $_REQUEST[ $tab_name ] ) && in_array( $_REQUEST[ $tab_name ], array( 'all', 'most-used', 'search' ), true ) ) {
$current_tab = $_REQUEST[ $tab_name ];
}
if ( ! empty( $_REQUEST[ "quick-search-taxonomy-{$taxonomy_name}" ] ) ) {
$current_tab = 'search';
}
$removed_args = array('action', 'customlink-tab', 'edit-menu-item', 'menu-item', 'page-tab', '_wpnonce');
$most_used_url = $nav_menu_selected_id ? add_query_arg( $tab_name, 'most-used', remove_query_arg( $removed_args )) : '';
$view_all_url = $nav_menu_selected_id ? add_query_arg( $tab_name, 'all', remove_query_arg( $removed_args )) : '';
$search_url = $nav_menu_selected_id ? add_query_arg( $tab_name, 'search', remove_query_arg( $removed_args )) : '';
// Начало HTML-контента мета-блока
?>
" class="taxonomydiv">
" class="taxonomy-tabs add-menu-item-tabs">
- >
" href="">
labels->most_used ); ?>
- >
" href="">
- >
" href="">
" class="tabs-panel " role="region" aria-label="labels->most_used ); ?>" tabindex="0">
" class="categorychecklist form-no-clear">
$taxonomy_name, 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false));
$args['walker'] = $walker;
echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $popular_terms), 0, (object) $args);
?>
" class="tabs-panel tabs-panel-view-all " role="region" aria-label="labels->all_items ); ?>" tabindex="0">
" data-wp-lists="" class="categorychecklist form-no-clear">
" class="tabs-panel " role="region" aria-label="labels->search_items ); ?>" tabindex="0">
$taxonomy_name, 'name__like' => $searched, 'fields' => 'all', 'orderby' => 'count', 'order' => 'DESC', 'hierarchical' => false));
} else {
$searched = '';
$search_results = array();
}
?>
" id="" />
"submit-quick-search-taxonomy-{$taxonomy_name}"));
?>
" data-wp-lists="" class="categorychecklist form-no-clear">
- get_error_message(); ?>
Похожие функции
- get_nav_menu_locations() — Получает местоположения меню.
- get_the_posts_navigation() — Получает навигацию по записям.
- has_nav_menu() — Проверяет, установлено ли меню.
- is_nav_menu() — Проверяет, является ли текущее меню.
- the_posts_navigation() — Выводит навигацию по записям.
- wp_get_nav_menu_items() — Получает элементы меню.
- wp_get_nav_menu_name() — Получает имя меню.
- wp_get_nav_menu_object() — Получает объект меню.
- wp_get_nav_menus() — Получает все меню.
Теперь статья готова к вставке в ваш блог!