获取分类名称
Get taxonomy name
我正在尝试使用自定义分类法修改具有自定义 post 的主题。在 posts 的底部,它显示了其他 posts 的列表(如“您可能还喜欢...”)我想做的是过滤 posts 显示在该区域中,因此它们与当前 post 的类别相匹配。这是一家旅游公司,我想展示同一地区的旅游。
自定义 posts 有一个名为“st_tour_type”的 term/taxonomy(我还是不明白)我怎样才能得到当前 post 那么我可以使用那个作为参考过滤页面底部显示的那些吗?
目前,如果为“st_tour_type”输入 slug/name,我可以手动过滤它们,但这没有意义
$args = [
'posts_per_page' => 4,
'post_type' => 'st_tours',
'st_tour_type' => 'lerwanda',
];
我希望你得到我需要的东西,这是我第一次使用分类法...
更新(11 月 23 日):
这里有更多的原始代码
$search_tax_advance = st()->get_option( 'attribute_search_form_tour', 'st_tour_type' );
$terms_posts = wp_get_post_terms(get_the_ID(),$search_tax_advance);
$arr_id_term_post = array();
foreach($terms_posts as $term_post){
$arr_id_term_post[] = $term_post->term_id;
}
$args = [
'posts_per_page' => 4,
'post_type' => 'st_tours',
'post_author' => get_post_field('post_author', get_the_ID()),
'post__not_in' => [$post_id],
'orderby' => 'rand',
'tax_query' => array(
'taxonomy' => $search_tax_advance,
'terms' => $arr_id_term_post,
'field' => 'term_id',
'operator' => 'IN'
),
];
我不完全理解你的问题,所以我不确定这是否是你所期望的,但试试这个。您需要使用函数 get_the_terms
获取当前 post 的任期。以下是您应该如何做:
<?php
global $post
$taxonomy = 'your_custom_taxonomy_slug';
$term = get_the_terms( $post->ID, $taxonomy );
上面的函数将 return 一个对象,其中包含有关您 post 当前任期的所有信息,如下所示:
<?php
Array
(
[0] => WP_Term Object
(
[term_id] => 1
[name] => Term Title
[slug] => term-title
[term_group] => 0
[term_taxonomy_id] => 1
[taxonomy] => custom_taxonomy
[description] =>
[parent] => 0
[count] => 2
[filter] => raw
)
)
现在根据你的问题,我猜你正在尝试进行查询以获取同一术语中的所有相关 post。所以 $args 应该改为:
<?php
$args = array(
'posts_per_page' => 4,
'post_type' => 'st_tours',
'tax_query' => array(
'taxonomy' => $taxonomy,
'field' => 'id',
'terms' => array( $term->term_id ),
'operator' => 'IN',
),
);
有关 Wp 查询中的分类参数,请参阅 WP Docs。
哦,我发现你对那些 terms/taxonomies 有点困惑,你可以这样理解它: Post 中的类别是分类法,你创建的所有类别 - 每个其中是一个术语。对于自定义 post 类型(在您的例子中是 Tour post 类型),假设您创建了一个名为“国家/地区”的自定义分类法,然后添加了一些国家/地区:美国、加拿大、日本。所以现在每个国家都是一个术语。
我正在尝试使用自定义分类法修改具有自定义 post 的主题。在 posts 的底部,它显示了其他 posts 的列表(如“您可能还喜欢...”)我想做的是过滤 posts 显示在该区域中,因此它们与当前 post 的类别相匹配。这是一家旅游公司,我想展示同一地区的旅游。
自定义 posts 有一个名为“st_tour_type”的 term/taxonomy(我还是不明白)我怎样才能得到当前 post 那么我可以使用那个作为参考过滤页面底部显示的那些吗?
目前,如果为“st_tour_type”输入 slug/name,我可以手动过滤它们,但这没有意义
$args = [
'posts_per_page' => 4,
'post_type' => 'st_tours',
'st_tour_type' => 'lerwanda',
];
我希望你得到我需要的东西,这是我第一次使用分类法...
更新(11 月 23 日): 这里有更多的原始代码
$search_tax_advance = st()->get_option( 'attribute_search_form_tour', 'st_tour_type' );
$terms_posts = wp_get_post_terms(get_the_ID(),$search_tax_advance);
$arr_id_term_post = array();
foreach($terms_posts as $term_post){
$arr_id_term_post[] = $term_post->term_id;
}
$args = [
'posts_per_page' => 4,
'post_type' => 'st_tours',
'post_author' => get_post_field('post_author', get_the_ID()),
'post__not_in' => [$post_id],
'orderby' => 'rand',
'tax_query' => array(
'taxonomy' => $search_tax_advance,
'terms' => $arr_id_term_post,
'field' => 'term_id',
'operator' => 'IN'
),
];
我不完全理解你的问题,所以我不确定这是否是你所期望的,但试试这个。您需要使用函数 get_the_terms
获取当前 post 的任期。以下是您应该如何做:
<?php
global $post
$taxonomy = 'your_custom_taxonomy_slug';
$term = get_the_terms( $post->ID, $taxonomy );
上面的函数将 return 一个对象,其中包含有关您 post 当前任期的所有信息,如下所示:
<?php
Array
(
[0] => WP_Term Object
(
[term_id] => 1
[name] => Term Title
[slug] => term-title
[term_group] => 0
[term_taxonomy_id] => 1
[taxonomy] => custom_taxonomy
[description] =>
[parent] => 0
[count] => 2
[filter] => raw
)
)
现在根据你的问题,我猜你正在尝试进行查询以获取同一术语中的所有相关 post。所以 $args 应该改为:
<?php
$args = array(
'posts_per_page' => 4,
'post_type' => 'st_tours',
'tax_query' => array(
'taxonomy' => $taxonomy,
'field' => 'id',
'terms' => array( $term->term_id ),
'operator' => 'IN',
),
);
有关 Wp 查询中的分类参数,请参阅 WP Docs。
哦,我发现你对那些 terms/taxonomies 有点困惑,你可以这样理解它: Post 中的类别是分类法,你创建的所有类别 - 每个其中是一个术语。对于自定义 post 类型(在您的例子中是 Tour post 类型),假设您创建了一个名为“国家/地区”的自定义分类法,然后添加了一些国家/地区:美国、加拿大、日本。所以现在每个国家都是一个术语。