Функция WP_NAV_MENU_ITEM_TAXONOMY_META_BOX() для элемента меню таксономии

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="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(); ?>

"> id="" class="select-all" /> class="button submit-add-to-menu right" value="" name="add-taxonomy-menu-item" id="" />

Похожие функции

  • 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() — Получает все меню.

Теперь статья готова к вставке в ваш блог!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *