WordPress自定义分类查询

时间:2016-12-21 18:02:16

标签: php wordpress

我有一个自定义帖子类型(媒体文章),它使用一些自定义字段,并且在该分类中有一个自定义分类(媒体文章类别)和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。

1 个答案:

答案 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' );