【问题标题】:How to group a taxonomy by groups如何按组对分类进行分组
【发布时间】:2015-04-27 17:15:52
【问题描述】:

我正在处理一个使用自定义帖子类型和 2 个自定义分类的页面。我的自定义帖子类型称为“系列”,我的自定义分类称为“temporada”和“capitulo”。

我想列出所有的 temporadas,但将它们与各自的 capitulos 组合在一起。

所以说清楚,我有 2 个 Temporadas。 (temporada 1) 有 (7 capitulos) 和 (temporada 2) 有 (11 capitulos)

我想将所有 capitulos 与它们各自的 temporadas 组合在一起。

我正在使用此代码:

<?php

$temporada = 'temporada';
$capitulo = 'capitulo';
$tax_temporada = get_terms($temporada);
$tax_capitulos = get_terms($capitulo);

for ($i = 0; $i < count($tax_temporada); $i++) {
echo '<div class="panel panel-default">';
echo '<div class="panel-heading" role="tab" id="c'. $tax_capitulos[$i]->name.'">';
echo '<h4 class="panel-title">' . '<a data-toggle="collapse" data-parent="#accordion" href="#'. $tax_temporada[$i]->name.'" aria-expanded="true" aria-controls="' . $tax_temporada[$i]->name.'" >Temporada: ' . $tax_temporada[$i]->name.'</a></h4>';
echo '</div>';
echo '<div id="'. $tax_temporada[$i]->name.'" class="panel-collapse collapse" role="tabpanel" aria-labelledby="c'. $tax_capitulos[$i]->name.'">';
echo '<div class="panel-body">';

foreach ($tax_capitulos as $tax_capitulo) {
echo '<li>' . '<a href="' . esc_attr(get_term_link($tax_capitulo,   $taxonomy)) . '" title="' . sprintf( __( "View all posts in %s" ), $tax_capitulo->name ) . '" ' . '>Capitulo: ' . $tax_capitulo->name.'</a></li>';
}
echo '</div>'.'</div>'.'</div>';

}
?>

代码给我看这个:(所有的capitulos都是一样的......)

  • -Temporada 1

    --capitulo 1

    --capitulo 2

    --capitulo 3

  • -Temporada 2

    --capitulo 1

    --capitulo 2

    --capitulo 3

这是显示每个首字母的代码

foreach ($tax_capitulos as $tax_capitulo) {
echo '<li>' . '<a href="' . esc_attr(get_term_link($tax_capitulo, $taxonomy)) . '" title="' . sprintf( __( "View all posts in %s" ), $tax_capitulo->name ) . '" ' . '>Capitulo: ' . $tax_capitulo->name.'</a></li>';
}

但是,就像我需要一个过滤器来显示带有相应 temporada 的 capitulos

有了这个是我添加自定义分类的方法

register_taxonomy(
'temporada', 
array('series' ),
array('hierarchical' => false,
        // This array of options controls the labels displayed in the WordPress Admin UI
        'labels' => array(
          'name' => _x( 'Temporada', 'taxonomy general name' ),
          'singular_name' => _x( 'Temporada', 'taxonomy singular name' ),
          'search_items' =>  __( 'Buscar Temporadas' ),
          'all_items' => __( 'TodosTemporada las Temporadas' ),
          'parent_item' => __( 'Parent Temporadas' ),
          'parent_item_colon' => __( 'Parent Temporadas:' ),
          'edit_item' => __( 'Editar Temporadas' ),
          'update_item' => __( 'Actualizar Temporadas' ),
          'add_new_item' => __( 'Agregar Nueva Temporadas' ),
          'new_item_name' => __( 'Nuevo Temporadas Nombre' ),
          'menu_name' => __( 'Temporada' ),
          'separate_items_with_commas' => __( 'Temporada del capitulo, Ej: 1, 2', 'cc' ),
    'choose_from_most_used' => __( 'Buscar entre los mas Usados', 'cc' ),
        ),
// Control the slugs used for this taxonomy
'show_ui'               => true,
    'show_admin_column'     => true,
    'update_count_callback' => '_update_post_term_count',
    'query_var'             => true,
    'rewrite'               => false,


));
register_taxonomy(
'capitulo', 
array('series' ),
array('hierarchical' => false,
        // This array of options controls the labels displayed in the WordPress Admin UI
        'labels' => array(
          'name' => _x( 'Capitulo', 'taxonomy general name' ),
          'singular_name' => _x( 'capitulo', 'taxonomy singular name' ),
          'search_items' =>  __( 'Buscar capitulo' ),
          'all_items' => __( 'Todos las capitulo' ),
          'parent_item' => __( 'Parent capitulo' ),
          'parent_item_colon' => __( 'Parent capitulo:' ),
          'edit_item' => __( 'Editar capitulo' ),
          'update_item' => __( 'Actualizar capitulo' ),
          'add_new_item' => __( 'Agregar Nueva capitulo' ),
          'new_item_name' => __( 'Nuevo Nombre Capitulo' ),
          'menu_name' => __( 'Capitulo' ),
          'separate_items_with_commas' => __( 'Capitulo, Ej: 1, 2', 'cc' ),
    'choose_from_most_used' => __( 'Buscar entre los mas Usados', 'cc' ),
        ),
// Control the slugs used for this taxonomy
'show_ui'               => true,
    'show_admin_column'     => true,
    'update_count_callback' => '_update_post_term_count',
    'query_var'             => true,
   'rewrite'               => false,


));

}
add_action( 'init', 'serie_custom_taxonomies', 0 );

任何帮助或建议将不胜感激。

【问题讨论】:

    标签: php wordpress wordpress-theming taxonomy custom-taxonomy


    【解决方案1】:

    我花了一段时间,但我可以看到你的问题。

    你的内部循环是一个非常友好的foreach(我更喜欢foreachfor),但它循环了所有$tax_capitulos,因为你没有告诉它如何只找到$tax_capitulos$tax_temporada有关。

    您描述系统$tax_capitulos 分组或属于$tax_temporada 的方式,但您的代码并未反映这一点。我不太了解系统,无法了解对象关系,但我希望看到类似的东西:

    foreach ($tax_temporada->tax_capitulos as $tax_capitulo) {
        // etc
    }
    

    foreach ($tax_capitulos[$tax_temporada[$i]] as $tax_capitulo) {
        // etc
    }
    

    foreach (get_tax_capitulos($tax_temporada[$i]) as $tax_capitulo) {
        // etc
    }
    

    或定义关系的东西。我怀疑这就是您的数据格式的工作方式,但我希望您能理解我在这里的意思。

    就目前而言,您将获得每个$tax_temporada 下列出的所有$tax_capitulos,因为这是您的代码告诉它要做的事情。

    我希望这对您有所帮助。在不了解您更广泛的代码库的情况下,我可以回答您的问题。

    【讨论】:

    • 我使用 2 个自定义分类法,1 个 temporada(季节)和 1 个 capitulo(章节)。我的问题是您描述的“您的代码没有反映这一点”。我尝试了一些不同的方式,但得到了错误。
    • 我添加了更多用于显示分类的代码,希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多