WP как вывести все метки кастомной категории?
Есть вот такая кастомная категория (таксономия) vendors Заполненная метками
/*
* Регистрация таксономии производителей
*/
add_action( 'init', 'create_vendor_taxonomies' );
// функция, создающая таксономии "vendors" для постов типа "vendor"
function create_vendor_taxonomies(){
// Добавляем недревовидную таксономию 'vendors' (как метки)
register_taxonomy('vendors', array('vendor', 'post'), array(
'hierarchical' => true,
'labels' => array(
'name' => _x( 'Производители', 'taxonomy general name' ),
'singular_name' => _x( 'Vendor', 'taxonomy singular name' ),
'search_items' => __( 'Поиск производителей' ),
'all_items' => __( 'Все производители' ),
'parent_item' => __( 'Parent Vendor' ),
'parent_item_colon' => __( 'Parent Vendor:' ),
'edit_item' => __( 'Править производителя' ),
'update_item' => __( 'Обновить производителя' ),
'add_new_item' => __( 'Добавить нового производителя' ),
'new_item_name' => __( 'Имя нового производителя' ),
'menu_name' => __( 'Vendors' ),
),
'show_ui' => true,
'show_in_rest' => true,
'query_var' => true,
'has_archive' => true,
));
}
создал под нее страницу page-vendors.php
Вопрос как в ней вывести списком все метки которые к ней относятся (с пагинацией) Пишу вот так:
<ul class="vendors">
<?php
$args = array(
'taxonomy' => 'vendors',
'orderby' => 'date',
'paged' => get_query_var("paged") ?: 1,
);
$query = new WP_Query($args);
if ($query->have_posts()) {
$term = get_queried_object();
$termID = $term->term_id;
while ($query->have_posts()) : $query->the_post(); ?>
<li><a href="<?php echo get_permalink() ?>"><?php echo the_title(); ?></a></li>
<?php endwhile;
} ?>
<?php get_template_part("components/pagination");
wp_reset_postdata(); ?>
</ul>
но оно работает не верно... я пробовал итерировать по while ($query->have_posts()) : $query->the_tag(); но тогда вообще ломается(
Ответы (1 шт):
Если Вам нужно вывести список таксономий, а не пост тайпов, то имейте ввиду что WP_Query выводит как раз таки пост тайпы, а не таксономии. Для вывода таксономий можно использовать get_terms(). В WordPress пагинация предусмотрена только для пост тайпов, потому пагинацию придется писать самостоятельно. Например можно добавить GET параметры в URL с номером страницы.
<?php
$paged = isset( $_GET['term_page'] ) ? intval( $_GET['term_page'] ) : 1;
if( $paged < 1 ) $paged = 1;
$args = [
'taxonomy' => 'vendors',
'number' => 10,
'offset' => ($paged - 1) * 10
'orderby' => 'date',
'order' => 'ASC',
];
$terms = get_terms( $args );
if( !empty( $terms ) ) : ?>
<ul class="vendors">
<?php foreach ( $terms as $term ) : ?>
<li><a href="<?php echo esc_url( get_term_link( $term ) ); ?>"><?php echo esc_html( $term->name ); ?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<a href="<?php echo esc_url( add_query_arg( 'term_page', $paged-- ) ); ?>">Предыдущая</a> | <a href="<?php echo esc_url( add_query_arg('term_page', $paged++) ); ?>">Следующая</a>