我正在尝试构建archive-custom.php页面以显示选项卡式列表。每个自定义帖子类型都是与分类法相关联的“消息”,分类法将它们按“系列”分组和组织。分类法包含有关每个系列的信息,包括它的“系列类型”和每个系列的图形。
目标是该页面显示“主要”类型的所有“系列”列表,并带有图形和分类法名称。点击“系列”将带您进入带有所有“消息”列表的“系列”页面
我已经得到一个查询来返回我想要的大多数信息,这时它只返回重复项,因为我的查询是错误的。它为每个“消息”返回“系列”,因此,如果有4个“消息”,我将获得4次该“系列”。我知道查询需要更改。
我也遇到了返回分类法名称的问题。在下面的代码中,我将它返回两种不同的方式-一种有效,但可以在链接内返回分类法名称,这是不必要的。另一个仅返回“数组”,因为我的语法错误,并且我无法在Wordpress Codex中找到示例。
我对Wordpress查询不是很熟悉,但是我觉得这里有重复的查询是不必要的。
<?php
//this initial query is returning the results for each message instead of returning just each series in the type "main"
$args = array(
'post_type' => 'messages',
'post_status' => 'publish',
//thanks to dmarco for pointing out this should use the meta_query instead
//not certain how to meta_query the attached taxonomy
'tax_query' => array(
array(
'taxonomy' => 'cpt_series',
'field' => 'series_type',
'terms' => 'main'
)
)
);
$series = new WP_Query( $args );
if( $series->have_posts() ) :
?>
<ul>
<?php
while( $series->have_posts() ) :
$series->the_post();
//get the custom taxonomy fields and assign them to var
//this query is to access the custom post type fields.
$types = get_terms( array(
'taxonomy' => 'cpt_series',
'hide_empty' => true,
));
foreach($types as $type) {
$image = get_field('series_graphic', 'cpt_series_' . $type->term_id . '' );
$seriesLink = get_term_link($type->term_id, $taxonomy = 'cpt_series');
//This title doesn't work - syntax is wrong
$seriesTitle = wp_get_post_terms('name');
if ( has_term( $type->term_id, 'cpt_series')) {
$seriesGraphic = $image['url'];
}
}
?>
<li>
<a href="<?=$seriesLink?>">
<?php
echo '<img src="' . $seriesGraphic . '" />';
echo $seriesTitle;
$seriesTitle = the_terms($post->ID, 'sermon_series', '');
?>
</a>
</li>
<?php
endwhile;
wp_reset_postdata();
?>
</ul>
<?php
else :
esc_html_e( 'No series available!', 'text-domain' );
endif;
?>
这非常接近完成我想要的事情,再次获得“系列” 每个“消息”,而不仅仅是“主要”类型中所有“系列”的列表。很想知道如何正确获取返回的“名称”。谢谢。
答案 0 :(得分:0)
您遇到的第一个问题:
$args = array(
'post_type' => 'messages',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'cpt_series',
'field' => 'series_type',
'terms' => 'main'
)
)
);
'field' => 'series_type'
-在此处根据搜索内容进行命名,选项为:term_id
,name
,slug
或term_taxonomy_id
。转到数据库并找到表wp_terms。在那里您可能会看到这些值。因此,我认为这些行应类似于:
array(
'taxonomy' => 'cpt_series',
'field' => 'slug',
'terms' => 'main'
)
答案 1 :(得分:0)
您可以尝试使用此元查询作为初始查询。
from operator import itemgetter
sorted(data_input, key=itemgetter(1,0))
# [[100, 0], [130, 0], [10, 1], [2, 2], [78, 10], [1, 99], [100, 100]]
答案 2 :(得分:0)
通过直接查询分类法发现了方法。
$terms = get_terms(array(
'taxonomy' => 'cpt_series',
'hide_empty' => true,
'meta_query' => array(
array(
'key' => 'series_type',
'value' => 'main',
'compare' => 'LIKE'
),
),
));
if ( ! empty( $terms ) ) {
echo '<ul>';
foreach ( $terms as $term ) {
$image = get_field('series_graphic', 'cpt_series_' . $term->term_id . '' );
$seriesLink = get_term_link($term->term_id, $taxonomy = 'cpt_series');
$seriesGraphic = $image['url'];
?>
<li>
<a href="<?=$seriesLink?>">
<img src="<?=$seriesGraphic?>" />
<?=$term->name?>
</a>
</li>
<?php
}
echo '</ul>';
} else {
echo 'No term found.';
}
谢谢。