WordPress Custom Post Тип архива страницы с раскрывающимися Таксономии

Я разрабатываю цифровую библиотеку латинской литературы для своей диссертации.
Сейчас я работаю над страницей архива автора.
Авторы — это пользовательский тип записи, зарегистрированный как «автор» с присвоенной ему пользовательской таксономией с именем «periodi».
На странице архива (archive-auctores.php) я хотел бы показать всех авторов, перечисленных в метаполе и трех других столбцах: периоды (которые относятся к пользовательской таксономии, которую я хотел бы сделать фильтром), число книг (должно быть количество книг (cpt), назначенных этому автору) и Gener (где отображаются все литературные жанры книг, назначенных этому автору, и это будет другая таксономия, назначенная для книги cpt через cpt- плагин onomies). Числовой столбец должен быть сортируемым (asc / desc), в то время как я хотел бы сделать фильтр для периодов и для видов.
И.Е. -> открыв страницу архива, он покажет полный список авторов. Таким образом, должна быть возможность отфильтровать авторов по периоду, и на странице должны отображаться только авторы, «помеченные» этим конкретным термином таксономии.

Я думал, что нашел решение Вот, но когда я пытаюсь выбрать один термин в выпадающем списке, список остается прежним.

Я наверняка что-то упустил.
Это код моего шаблона прямо сейчас:

<form method="post" action="<?php the_permalink()?>">
<select name="periodi" id="selectperiodo" class="postform" onchange="submit();">
<option value="">Tutti i periodi</option>
<?php
$args = array(
'orderby'                => 'ID',
'order'                  => 'ASC',
'hide_empty'             => false,
'fields'                 => 'all',
'hierarchical'           => true,
'pad_counts'             => false,
'get'                    => '',
'child_of'               => 0,
'parent'                 => '',
'childless'              => false,
'cache_domain'           => 'core',
'update_term_meta_cache' => true,
'meta_query'             => '',
'parent'                  => 0

);
$terms = get_terms('periodi', $args);
if ( $terms ) {
foreach ( $terms as $term ) {?>
<option <?php if($term->slug == $_POST['periodi']){ echo 'selected="selected"';} ?> value="<?php echo esc_attr( $term->slug )?>"><?php echo esc_html( $term->name ) ?></option>
<?php }
}
?>
</select>
</form>

<table class="dataTable table table-hover">
<tr>
<th>Nome</th>
<th>Periodo</th>
<th>Opere</th>
<th>Genere</th>
</tr>
<?php $auctores_query = new WP_Query(array(
'post_type' => 'auctores',
'posts_per_page' => -1,
'order'     => 'ASC',
'meta_key' => 'nome_classico',
'orderby'   => 'meta_value',
)
); ?>
<?php $j = 0 ?>
<?php while ($auctores_query->have_posts()) :     $auctores_query->the_post(); ?>
<?php $additional_class = (++$j % 2 == 0) ? 'even' : 'odd'; ?>
<tr class="<?php echo $additional_class ?>">
<td><?php the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" title="' . esc_attr( sprintf( __( 'Collegamento alla pagina di %s', 'antiquarialatina' ), the_title_attribute( 'echo=0' ) ) ) . '" rel="bookmark">', '</a></h3>' )?></td>
<td>
<?php
$terms = get_the_terms( $post->ID, 'periodi' );
if ( $terms && ! is_wp_error( $terms ) ) :
$periodi_links = array();
foreach ( $terms as $term ) {
$periodi_links[] = $term->name;
}
$on_draught = join( ", ", $periodi_links );
?>
<?php echo $on_draught; ?>
<?php endif; ?>
</td>
<td><span class="badge"><?php
$args = array('post_type' => 'texti',
'tax_query' => array (
array ( 'taxonomy' => 'auctores',
'field'    => 'id',
'terms'    => get_the_ID()
)
));
$query = new WP_Query( $args );
// the query

echo $query->found_posts;

?></span></td>
</tr>
<?php endwhile; ?>
</table>

Любая помощь могла бы быть полезна.
Спасибо!

1

Решение

Если вы хотите, чтобы список авторов был ограничен в зависимости от выпадающего списка, вам нужно изменить запрос и использовать Параметры запроса таксономии:

Измените код так, чтобы он отвечал на пост формы следующим образом:

// First we have to take the args out into a variable
$args = array(
'post_type'      => 'auctores',
'posts_per_page' => -1,
'order'          => 'ASC',
'meta_key'       => 'nome_classico',
'orderby'        => 'meta_value'
);

// Then, we watch for the post and modify the args if appropriate:
if ( ! empty( $_POST['periodi'] ) ) {
$args['tax_query'] = array(
array(
'taxonomy' => 'periodi',
'field'    => 'slug',
'terms'    => $_POST['periodi']
)
);
}

// Then we can execute the query:
$auctores_query = new WP_Query( $args );
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector