首页 > 解决方案 > 如何创建过滤器以显示自定义帖子类型

问题描述

我有一个自定义帖子类型“项目”,并有一个概述页面,显示这些帖子类型以及特色图片和帖子标题。我还为该帖子类型创建了一个自定义分类,并将帖子分配给该分类中的类别。

我现在想要实现的是,在列出所有帖子的概览页面上,它们上方应该是一个类似于显示自定义分类类别的过滤器栏。

我现在的问题是:我需要哪些 WordPress 功能,以便当有人点击其中一个类别时,只会显示分配给该类别的帖子?我不希望页面刷新或加载另一个页面。这是我想要实现的示例:https ://www.hauserlacour.de/en/work

另外,我不是编码员。我使用 Pinegrow 将我的静态 html 网站转换为 wordpress 主题。但在 Pinegrove 中,我可以选择很多 WP 功能。这就是为什么我只需要了解上面的设置是如何工作的。

提前谢谢了!

标签: wordpressfilterfilteringtaxonomy

解决方案


如果你对你有更多的了解,WP_Query你可以使用tax_query如下:

$args = array(
    'post_type' => 'project',
    'post_status' => 'publish',
    'tax_query' => array(
        array(
            'taxonomy' => array( 'project_cat' ), // <-- NO! Does not work.
            'field'    => 'slug',
            'terms'    => array( 'project_cat1', 'project_cat2')
        )
    )
);
$query = new WP_Query( $args );

参考:https ://developer.wordpress.org/reference/classes/wp_tax_query/

或者您可以简单地列出分类术语并简单地重定向到分类详细信息页面,其中将自动列出相应的项目。

$args = array( 'hide_empty=0' );
 
$terms = get_terms( 'my_term', $args );
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
    $count = count( $terms );
    $i = 0;
    $term_list = '<p class="my_term-archive">';
    foreach ( $terms as $term ) {
        $i++;
        $term_list .= '<a href="' . esc_url( get_term_link( $term ) ) . '" alt="' . esc_attr( sprintf( __( 'View all post filed under %s', 'my_localization_domain' ), $term->name ) ) . '">' . $term->name . '</a>';
        if ( $count != $i ) {
            $term_list .= ' &middot; ';
        }
        else {
            $term_list .= '</p>';
        }
    }
    echo $term_list;
}

参考:https ://developer.wordpress.org/reference/functions/get_terms/


推荐阅读