如何将当前分类术语传递到新的WP_QUERY?

时间:2017-05-04 作者:danbru1989

在我的个人投资组合页面上,我想在帖子下面添加一个“查看更多此类内容”部分。

下面是我检查单个CPT并创建新查询的代码:

add_action( \'genesis_loop\', \'bds_more_projects_query\' );
    function bds_more_projects_query() {
        if ( is_singular( \'portfolio\' ) ) {
            $categories = get_the_terms( $post->ID, \'portfolio_category\' );
            $args = array(
                \'post_type\' => \'portfolio\',
                \'posts_per_page\' => 4,
                \'tax_query\' => array(
                    array(
                        \'taxonomy\' => \'portfolio_category\',
                        \'field\' => \'name\',
                        \'terms\' => array( $categories ),
                    ),
                ),
            );
            $loop = new WP_Query( $args );
            if ( $loop->have_posts() ) {
                while ( $loop->have_posts() ) : $loop->the_post();
                echo the_title();
                endwhile;
            }
            wp_reset_postdata();
        }
    }
当我手动输入一个术语字符串时,相应的标题都会根据需要显示出来,但我无法使用“get_the_terms”功能来动态显示当前的帖子类别。

我缺少的是我的代码?

1 个回复
SO网友:Andrew Minion

尝试以下操作:

add_action( \'genesis_loop\', \'bds_more_projects_query\' );
function bds_more_projects_query() {
    if ( is_singular( \'portfolio\' ) ) {
        $categories = get_the_terms( $post->ID, \'portfolio_category\' );
        $cat_ids = array();
        foreach ( $categories as $category ) {
            $cat_ids[] = $category->term_id;
        }
        $args = array(
            \'post_type\' => \'portfolio\',
            \'posts_per_page\' => 4,
            \'tax_query\' => array(
                array(
                    \'taxonomy\' => \'portfolio_category\',
                    \'field\' => \'id\',
                    \'terms\' => array( $cat_ids ),
                ),
            ),
        );
        $loop = new WP_Query( $args );
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();
            echo the_title();
            endwhile;
        }
        wp_reset_postdata();
    }
}
基本上,在$categories 数组,添加term_id ,然后在查询参数中使用该新数组。这个get_the_terms 函数返回一个WP\\u Term对象数组,而不仅仅是一个id数组(请参见WP Code Reference 了解更多信息)。

要检查的另一件事是$post 正在给您函数内的当前帖子。

要验证,请添加var_dump($post) 就在is_singular( \'portfolio\' ) 条件并确保它为您提供了当前的post对象。如果不是,请添加global $post 内部bds_more_projects_query 函数并重试。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请