【问题标题】:How to create a filter to display custom post types如何创建过滤器以显示自定义帖子类型
【发布时间】:2026-01-07 09:00:01
【问题描述】:

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

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

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

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

非常感谢!

【问题讨论】:

    标签: wordpress filter filtering taxonomy


    【解决方案1】:

    如果您对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/

    【讨论】:

    • 嗨@Gorakh_sth,谢谢你的回答!我相信我可以在 Pinegrow 中添加自定义代码。那么,您提到的第一个选项,就是我实现过滤器所需的所有代码?显然必须换掉自定义帖子类型和自定义分类名称,但它应该可以工作吗?
    • 我试过了,但代码不起作用。我的理解也是,这需要一个 Ajax 请求
    • @JanaLux 是的,如果你想使用 ajax,你需要做 ajax 请求,并且上面的 WP_Query 应该在 ajax 操作函数中。或者您可以简单地提交表单并选择类别并将其传递给 WP_Query。