wp_nav_menu_item_taxonomy_meta_box() │ WP 3.0.0 Виводить на екран метабокс із вибором термінів таксономії (для меню).
Використовується в акордеоні для вибору пунктів меню “Рубрик”, “Міток” та інших таксономій.
Хуків немає.
Повертає null
. Нічого.
Використання wp_nav_menu_item_taxonomy_meta_box( $object, $box );
$object
(рядок) (обов’язковий)
Не використовується.
$box
(масив) (обов’язковий) Taxonomy menu item meta box arguments.
$id (рядок) ID метабоксу.
$title (рядок) Заголовок метабоксу.
$callback (рядок) Функція, яка виводить вміст метабоксу.
$args (об’єкт) Додаткові аргументи метабоксу (об’єкт таксономії цього метабоксу).Приклади #1 Відобразимо в метабоксі “Рубрики” всі терміни та приховаємо пагінацію Функція не має фільтра, за допомогою якого можна було б змінити аргументи запиту “Всі рубрики”. Кількість запитуваних термінів 50 (прописано в змінній) і на основі цього числа будується пагінація. Щоб вирішити задачу, скористаємося фільтром функції get_terms() , якою запитуються рубрики.
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 ) {
$screen = get_current_screen();
// Це сторінка з редагуванням меню
if ( $screen && $screen->base === 'nav-menus' ) {
// Це потрібний нам запит
if ( $taxonomies === [ 'category' ] && $args['number'] === 50 ) {
$args['number'] = 0;
// Прихуємо блок із пагінацією
add_action( 'admin_footer', function () {
?>
<style>
#tabs-panel-category-all .add-menu-item-pagelinks {
display: none;
}
</style>
<?php
} );
}
}
return $args;
} Додати свій приклад
нотатки Global. int|Рядок. $nav_menu_selected_id список змін Код wp_nav_menu_item_taxonomy_meta_box() wp nav menu item taxonomy meta box WP 6.0.2 <?php
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';
// Paginate browsing for large numbers of objects.
$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 '<p>'. __( 'No items.') . '</p>';
return;
}
$num_pages = 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' => '<span aria-label="' . esc_attr__( 'Previous page' ) . '">' . __('«'). '</span>',
'next_text' => '<span aria-label="' . esc_attr__( 'Next page' ) . '">' . __('»'). '</span>',
'before_page_number' => '<span class="screen-reader-text">' . __('Page'). '</span>',
'total' => $num_pages,
'current' => $pagenum,
)
);
$db_fields = false;
if ( is_taxonomy_hierarchical( $taxonomy_name ) ) {
$ db_fields = array (
'parent' => 'parent',
'id' => 'term_id',
);
}
$walker = новий 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 = '';
$view_all_url = '';
$search_url = '';
if ( $nav_menu_selected_id ) {
$most_used_url = esc_url( add_query_arg( $tab_name, 'most-used', remove_query_arg( $removed_args ) ) ));
$view_all_url = esc_url( add_query_arg( $tab_name, 'all', remove_query_arg( $removed_args ) ) ));
$search_url = esc_url( add_query_arg( $tab_name, 'search', remove_query_arg( $removed_args ) ) ));
}
?>
<div id="taxonomy-<?php echo $taxonomy_name; ?>" class="taxonomydiv">
<ul id="taxonomy-<?php echo $taxonomy_name; ?>-tabs" class="taxonomy-tabs add-menu-item-tabs">
<li <?php echo ( 'most-used' === $current_tab ? ' class="tabs"' : '' ); ?>>
<a class="nav-tab-link" data-type="tabs-panel-<?php echo esc_attr( $taxonomy_name ); ?>-pop" href="<?php echo $most_used_url; ?>#tabs- panel-<?php echo $taxonomy_name; ?>-pop">
<?php echo esc_html( $taxonomy->labels->most_used ); ?>
</a>
</li>
<li <?php echo ( 'all' === $current_tab ? ' class="tabs"' : '' ); ?>>
<a class="nav-tab-link" data-type="tabs-panel-<?php echo esc_attr( $taxonomy_name ); ?>-all" href="<?php echo $view_all_url; ?>#tabs- panel-<?php echo $taxonomy_name; ?>-all">
<?php _e( 'View All'); ?>
</a>
</li>
<li <?php echo ( 'search' === $current_tab ? ' class="tabs"' : '' ); ?>>
<a class="nav-tab-link" data-type="tabs-panel-search-taxonomy-<?php echo esc_attr( $taxonomy_name ); ?>" href="<?php echo $search_url; ?># tabs-panel-search-taxonomy-<?php echo $taxonomy_name; ?>">
<?php _e( 'Search'); ?>
</a>
</li>
</ul><!-- .taxonomy-tabs -->
<div id="tabs-panel-<?php echo $taxonomy_name; ?>-pop" class="tabs-panel <?php echo ( 'most-used' === $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive'); ?>" role="region" aria-label="<?php echo $taxonomy->labels->most_used; ?>"
<ul id="<?php echo $taxonomy_name; ?>checklist-pop" class="categorychecklist form-no-clear" >
<?php
$popular_terms = get_terms(
array(
'taxonomy' => $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 );
?>
</ul>
</div><!-- /.tabs-panel -->
<div id="tabs-panel-<?php echo $taxonomy_name; ?>-all" class="tabs-panel tabs-panel-view-all <?php echo ( 'all' === $current_tab ? 'tabs -panel-active' : 'tabs-panel-inactive' );"> role="region" aria-label="<?
<?php if (! empty( $page_links ) ) : ?>
<div class="add-menu-item-pagelinks">
<?php echo $page_links; ?>
</div>
<?php endif; ?>
<ul id="<?php echo $taxonomy_name; ?>checklist" data-wp-lists="list:<?php echo $taxonomy_name; ?>" class="categorychecklist form-no-clear">
<?php
$args['walker'] = $walker;
echo walk_nav_menu_tree( array_map( 'wp_setup_nav_menu_item', $terms ), 0, (object) $args );
?>
</ul>
<?php if (! empty( $page_links ) ) : ?>
<div class="add-menu-item-pagelinks">
<?php echo $page_links; ?>
</div>
<?php endif; ?>
</div><!-- /.tabs-panel -->
<div class="tabs-panel <?php echo ( 'search' === $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' ); ?>" id="tabs-panel-search -taxonomy-<?php echo $taxonomy_name; ?>" role="region" aria-label="<?php echo $taxonomy->labels->search_items; ?>" tabindex="0">
<?php
if ( isset( $_REQUEST[ 'quick-search-taxonomy-' . $taxonomy_name ] ) ) {
$searched = esc_attr( $_REQUEST[ 'quick-search-taxonomy-' . $taxonomy_name ] );
$search_results = get_terms(
array(
'taxonomy' => $taxonomy_name,
'name__like' => $searched,
'fields' => 'all',
'orderby' => 'count',
'order' => 'DESC',
'hierarchical' => false,
)
);
} else {
$searched = '';
$search_results = array();
}
?>
<p class="quick-search-wrap">
<label for="quick-search-taxonomy-<?php echo $taxonomy_name; ?>" class="screen-reader-text"><?php _e( 'Search' ); ?></label>
<input type="search" class="quick-search" value="<?php echo $searched; ?>" name="quick-search-taxonomy-<?php echo $taxonomy_name; ?>" id="quick -search-taxonomy-<?php echo $taxonomy_name; ?>" />
<span class="spinner"></span>
<?php submit_button( __( 'Search' ), 'small quick-search-submit hide-if-js', 'submit', false, array( 'id' => 'submit-quick-search-taxonomy-' ). $taxonomy_name)); ?>
</p>
<ul id="<?php echo $taxonomy_name; ?>-search-checklist" data-wp-lists="list:<?php echo $taxonomy_name; ?>" class="categorychecklist form-no-clear">
<?php if ( ! empty( $search_results ) && ! is_wp_error( $search_results ) ) : ?>
<?php
$args['walker'] = $walker;
echo walk_nav_menu_tree( array_map( 'wp_setup_nav_menu_item', $search_results ), 0, (object) $args );
?>
<?php elseif ( is_wp_error( $search_results ) ) : ?>
<li><?php echo $search_results->get_error_message(); ?></li>
<?php elseif (! empty( $searched ) ) : ?>
<li><?php _e( 'No results found.'); ?></li>
<?php endif; ?>
</ul>
</div><!-- /.tabs-panel -->
<p class="button-controls wp-clearfix" data-items-type="taxonomy-<?php echo esc_attr( $taxonomy_name ); ?>">
<span class="list-controls hide-if-no-js">
<input type="checkbox"<?php wp_nav_menu_disabled_check( $nav_menu_selected_id ); ?> id="<?php echo esc_attr( $tab_name ); ?>" class="select-all" />
<label for="<?php echo esc_attr( $tab_name ); ?>"><?php _e( 'Select All' ); ?></label>
</span>
<span class="add-to-menu">
<input type="submit"<?php wp_nav_menu_disabled_check( $nav_menu_selected_id ); ?> class="button submit-add-to-menu right" value="<?php esc_attr_e( 'Add to Menu' ); ?>" name="add-taxonomy-menu-item" id="<?php echo esc_attr( 'submit-taxonomy-' . $taxonomy_name ); ?>" />
<span class="spinner"></span>
</span>
</p>
</div><!-- /.taxonomydiv -->
<?php
} Зв’язані функції