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_action( 'current_screen', function( $screen ){
// This is the menu editing page
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 ) {
// This is the query we need
if ( $taxonomies === [ 'category' ] && $args['number'] === 50 ) {
$args['number'] = -1;
// Hide the pagination block
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.8
<?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 = (int) ceil(
(int) 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>',
/* translators: Hidden accessibility text. */
'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 = 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 = '';
$view_all_url = '';
$search_url = '';
if ( $nav_menu_selected_id ) {
$most_used_url = add_query_arg( $tab_name, 'most-used', remove_query_arg( $removed_args ) );
$view_all_url = add_query_arg( $tab_name, 'all', remove_query_arg( $removed_args ) );
$search_url = add_query_arg( $tab_name, 'search', remove_query_arg( $removed_args ) );
}
?>
<div id="<?php echo esc_attr( "taxonomy-{$taxonomy_name}" ); ?>" class="taxonomydiv">
<ul id="<?php echo esc_attr( "taxonomy-{$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="<?php echo esc_attr( "tabs-panel-{$taxonomy_name}-pop" ); ?>"
href="<?php echo esc_url( $most_used_url . "#tabs-panel-{$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="<?php echo esc_attr( "tabs-panel-{$taxonomy_name}-all" ); ?>"
href="<?php echo esc_url( $view_all_url . "#tabs-panel-{$taxonomy_name}-all" ); ?>"
>
<?php _e( 'View All' ); ?>
</a>
</li>
<li <?php echo ( 'search' === $current_tab ? ' class="tabs"' : '' ); ?>>
<a class="nav-tab-link"
data-type="<?php echo esc_attr( "tabs-panel-search-taxonomy-{$taxonomy_name}" ); ?>"
href="<?php echo esc_url( $search_url . "#tabs-panel-search-taxonomy-{$taxonomy_name}" ); ?>"
>
<?php _e( 'Search' ); ?>
</a>
</li>
</ul><!-- .taxonomy-tabs -->
<div id="<?php echo esc_attr( "tabs-panel-{$taxonomy_name}-pop" ); ?>"
class="tabs-panel <?php echo ( 'most-used' === $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' ); ?>"
role="region" aria-label="<?php echo esc_attr( $taxonomy->labels->most_used ); ?>" tabindex="0"
>
<ul id="<?php echo esc_attr( "{$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="<?php echo esc_attr( "tabs-panel-{$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 echo esc_attr( $taxonomy->labels->all_items ); ?>" tabindex="0"
>
<?php if ( ! empty( $page_links ) ) : ?>
<div class="add-menu-item-pagelinks">
<?php echo $page_links; ?>
</div>
<?php endif; ?>
<ul id="<?php echo esc_attr( "{$taxonomy_name}checklist" ); ?>"
data-wp-lists="<?php echo esc_attr( "list:{$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 id="<?php echo esc_attr( "tabs-panel-search-taxonomy-{$taxonomy_name}" ); ?>"
class="tabs-panel <?php echo ( 'search' === $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' ); ?>"
role="region" aria-label="<?php echo esc_attr( $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="<?php echo esc_attr( "quick-search-taxonomy-{$taxonomy_name}" ); ?>" class="screen-reader-text">
<?php
/* translators: Hidden accessibility text. */
_e( 'Search' );
?>
</label>
<input type="search"
class="quick-search" value="<?php echo $searched; ?>"
name="<?php echo esc_attr( "quick-search-taxonomy-{$taxonomy_name}" ); ?>"
id="<?php echo esc_attr( "quick-search-taxonomy-{$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 esc_attr( "{$taxonomy_name}-search-checklist" ); ?>"
data-wp-lists="<?php echo esc_attr( "list:{$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="<?php echo esc_attr( "taxonomy-{$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
}
Cвязанные функции