Я разрабатываю цифровую библиотеку латинской литературы для своей диссертации.
Сейчас я работаю над страницей архива автора.
Авторы — это пользовательский тип записи, зарегистрированный как «автор» с присвоенной ему пользовательской таксономией с именем «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>
Любая помощь могла бы быть полезна.
Спасибо!
Если вы хотите, чтобы список авторов был ограничен в зависимости от выпадающего списка, вам нужно изменить запрос и использовать Параметры запроса таксономии:
Измените код так, чтобы он отвечал на пост формы следующим образом:
// 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 );
Других решений пока нет …