首页 文章

WordPress自定义分类查询

提问于
浏览
0

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

    当您单击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' );
    

相关问题