我有一个自定义帖子类型(媒体文章),它使用一些自定义字段,并且在该分类中有一个自定义分类(媒体文章类别)和14个术语。使用CPT存档模板输出所有自定义帖子没有问题。
我还在侧边栏中有一个菜单,其中列出了用于过滤自定义帖子的术语(我使用自定义WP菜单小部件来制作列表)。
我有一个带有查询的自定义分类模板。我能够成功地或者单独地显示帖子,具体取决于args中放置的分类术语。所以它按预期工作 - 如果我不需要使用过滤菜单。但是当我尝试使用分类术语菜单时,每个菜单项都会显示相同的内容。
我需要做的是在该菜单中使用每个分类术语仅显示该术语的CPT。是的,我可以为每个学期制作一个模板(所有14个!),但那里的乐趣在哪里?此外,客户端可能会在运行中添加更多术语,因此需要适应新生成的术语。
从本质上讲,我希望为所有分类术语设置一个查询/模板,以便动态显示点击任何分类术语的帖子。
任何人都可以帮助我将其提升到新的水平吗?
目前显示的是:
screenshot of current display with sidebar of custom taxonomies
这是我当前的查询:
$date = get_field('pub_date', false, false);
$date = new DateTime($date);
$args = array(
'post_type' => 'media_articles',
'post_status' => 'publish',
'posts_per_page' => '10',
'meta_key' => 'media_publication_date',
'orderby' => 'meta_value',
'order' => 'DESC',
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'media-article-category',
'field' => 'slug',
'terms' => array( 'focus-on-the-lands' ), //
),
array(
'taxonomy' => 'media-article-category',
'field' => 'slug',
'terms' => array( 'the-local-story' ), //
),
),
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
?>
<div class="media-item">
<h2><a href="<?php the_field('media_url'); ?>" target="_blank"><?php the_title(); ?><i class="fa fa-external-link" aria-hidden="true"></i></a></h2>
<?php
echo '<p class="lol-media-date">Publication Date: ' . DateTime::createFromFormat('Ymd', get_field('media_publication_date'))->format('F j, Y') . '</p>';
echo '<p>' . get_the_term_list( $post->ID, 'media-article-topics', 'Tags: ', ', ' ) . '</p>';
echo '<p class="lol-media-description">' . get_field('media_description') . '<span class="lol-media-publication">' . get_field('media_publication') . '</span></p>';
?>
</div><!-- end .media-item -->
<?php
endwhile;
endif;
我正在使用Genesis Framework。
答案 0 :(得分:0)
当您点击taxonomie-menu-item时,wordpress会默认过滤帖子。我认为你不应该在这里使用你自己的查询,但你可以修改默认查询。
使用操作挂钩pre_get_posts
来更改主查询。
function my_media_article_category_query( $query ) {
if ( is_tax( 'media-article-category' ) ) {
$query->set( 'meta_key', 'media_publication_date' );
$query->set( 'orderby', 'meta_value' );
$query->set( 'order', 'DESC' );
}
}
add_filter( 'pre_get_posts', 'my_media_article_category_query' );