【问题标题】:wp_list_categories in sidebar based on post_type侧边栏中的 wp_list_categories 基于 post_type
【发布时间】:2018-01-26 16:13:35
【问题描述】:
我想在我的自定义 post_type 中获取帖子的所有类别,并将它们显示为侧边栏中的列表。我该怎么做?
另外,基于我当前所在的类别网站,我不想使用默认模板 category.php,而是我想使用 archive-myposttype.php 来使用我自己的基于类别的布局。
所有类别都是默认帖子类别,不是自定义分类法。
我有两个 custom_post_types(posttype1、posttype2),但没有自定义分类,因此很难过滤和仅显示分配给自定义帖子类型帖子的类别。
请帮忙。谢谢。
【问题讨论】:
标签:
php
wordpress
wordpress-theming
【解决方案1】:
对于第一个问题,你必须使用原始sql:
<?php
$query = 'SELECT DISTINCT term_id FROM {$wpdb->prefix}term_taxonomy JOIN {$wpdb->prefix}term_relationships ON {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id JOIN {$wpdb->prefix}posts on {$wpdb->prefix}term_relationships.object_id = {$wpdb->prefix}posts.ID AND wp_3_posts.post_type ="custom_post" WHERE taxonomy = "category"';
$term_ids = $wpdb->get_col($query, 0);
$categories = get_terms(array("taxonomy" => "category", "object_ids" => $term_ids));
?>
参考这里:
https://codex.wordpress.org/Database_Description
对于第二个问题,您可以使用上面的代码来查找这是否是您要定位的类别,然后在 category.php 文件中加载您想要的自定义模板。
【解决方案2】:
当您说要将类别显示为列表时,我猜您不想为列出的每个类别添加链接。如果是这样,那么您可以使用“get_the_category()”函数轻松获取帖子的类别。
对于您的第二个问题,我不确定您是否需要基于类别或帖子类型的自定义模板,因为一个类别可以出现在两种帖子类型中,所以我看不出您如何实现这一点。
但是,如果您想显示基于类别 slug 的自定义模板,您可以轻松地创建文件并将它们命名为 category-{category-slug}.php。所以对于名为“照片”的类别,文件名将是“category-photos.php”。