Wordpress自定义帖子类型存档页面,下拉Taxonomyes

时间:2015-12-27 17:51:34

标签: php wordpress custom-post-type archive custom-taxonomy

我正在为我的论文开发一个拉丁文学数字图书馆。 现在我正在撰写作者的档案页面。 作者是一个自定义帖子类型,注册为“auctores”,其中分配了一个名为“periodi”的自定义分类。 在存档页面(archive-auctores.php)中,我想显示由meta字段和其他三列列出的所有作者:Periods(指我想制作过滤器的自定义分类),Number书籍(应该有分配给该作者的书籍(cpt)的数量)和Gener(在哪里显示分配给该作者的书籍的所有文学体裁,它将是通过cpt分配给书籍cpt的另一种分类法 - onomies插件)。数字列应该是可排序的(asc / desc),而我想为句点和种类制作过滤器。 I.E. - >打开存档页面,它将显示完整的作者列表。所以应该可以过滤作者的时间段,页面应该只显示作者用特定的分类术语“标记”。

我以为我找到了解决方案here,但当我尝试在下拉菜单中选择一个字词时,列表保持不变。

我肯定错过了一些东西。 这就是我现在模板的代码:

<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 个答案:

答案 0 :(得分:0)

如果您希望根据下拉选项限制作者列表,则您需要修改查询并使用Taxonomy Query Parameters

修改代码,使其响应表单帖子,如下所示:

// 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 );