【问题标题】:Wordpress Custom Post category archiveWordpress 自定义帖子类别存档
【发布时间】:2014-08-18 11:57:24
【问题描述】:

我设置了一个自定义帖子类型,其中包含许多类别和子类别。

我要做的是创建一个页面,显示特定类别中的所有帖子,并带有一个列出所有类别子类别的菜单,以便可以过滤帖子。

我尝试复制存档模板并将其重命名为 taxonomy-(my-custom-taxonomy).php,然后如果我转到 slug 会显示某些帖子,并使用 <?php wp_list_categories(); ?> 但我只想要一个特定类别的所有子类别的列表,并过滤这些帖子。我正在努力展示这些内容并为所有类别和子项使用一个模板。

【问题讨论】:

  • 您使用category-slug.php 而不是分类法进行类别过滤。仅显示儿童,<ul> <?php wp_list_categories('orderby=id&show_count=1&use_desc_for_title=0&child_of=8'); ?> </ul> 其中 8 是类别 ID。
  • 我想为所有页面使用一个模板,所以这个答案不起作用。另一个答案去哪儿了?我以为快到了。
  • 他们一定已经删除了他们的答案。

标签: wordpress custom-post-type wp-list-categories


【解决方案1】:

你可以使用

$term_id = get_queried_object()->term_id;

$tax= get_query_var( 'taxonomy' ) 

返回在您的 taxonomy.php 页面中查看的当前术语和分类的详细信息。

然后,您可以将该信息与 get_term_children 一起使用,以获取正在显示的当前术语的子术语。例如,请参阅提供的链接

编辑

您的代码应如下所示

<?php
$term_id = get_queried_object()->term_id;
$taxonomy_name = get_query_var( 'taxonomy' ); 
$termchildren = get_term_children( $term_id, $taxonomy_name );

foreach ( $termchildren as $child ) {
    echo '<ul>';
        $term = get_term_by( 'id', $child, $taxonomy_name );
        echo '<li><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . $term->name . '</a></li>';

    $args = array(
        'tax_query' => array(
            array(
                'taxonomy' => $taxonomy_name,
                'field'    => 'slug',
                'terms'    => $term->slug,
            ),
        ),
    );
    $the_query = new WP_Query( $args );

    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<p>' . get_the_title() . '</p>';
    }
    wp_reset_postdata();

    echo '</ul>';   

}
?> 

【讨论】:

  • 那么我会执行以下代码吗,因为它似乎没有显示任何内容:&lt;?php $term_id = get_query_var( 'term' ); $taxonomy_name = get_query_var( 'taxonomy' ); $termchildren = get_term_children( $term_id, $taxonomy_name ); echo '&lt;ul&gt;'; foreach ( $termchildren as $child ) { $term = get_term_by( 'id', $child, $taxonomy_name ); echo '&lt;li&gt;&lt;a href="' . get_term_link( $child, $taxonomy_name ) . '"&gt;' . $term-&gt;name . '&lt;/a&gt;&lt;/li&gt;'; } echo '&lt;/ul&gt;'; ?&gt;
  • 你在我的第一个代码中漏掉了一行。我已经用一个工作示例更新了我的答案
  • 我收到一个错误:注意:尝试在 term_id 行上获取非对象的属性
  • 奇怪的是你得到这个错误。用新方法更新了我的代码
  • 您更新的代码现在显示子类别列表,但不是所有帖子 - 我怎样才能让它显示页面和子页面中的所有帖子,然后在我过滤时选择一个子类别
猜你喜欢
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 2011-06-04
  • 2013-12-28
  • 2016-06-05
相关资源
最近更新 更多