档案页面中的两个不同查询

时间:2017-01-11 作者:Cha

(疑问无疑是误解的无限来源……)

我尝试在税务档案中显示两种类型的信息(taxonomy-artiste.php) :

自定义帖子(bio)中的页面内容,以及其他自定义帖子(works)中的帖子列表。如果我理解得很好,可以使用pre\\u get\\u post更改主查询。所以,我在我的function.php.

//Include all my CPT but the bio
function lm_exclude_bio( $query ) {
  if( is_tax(\'artiste\') && empty( $query->query_vars[\'suppress_filters\'] ) ) {
    $query->set( \'post_type\', array(
     \'post\', \'cpt#1\', \'cpt#2\'
        ));
      return $query;
    }
}
add_filter( \'pre_get_posts\', \'lm_exclude_bio\' );

好的,它起作用了。

但是,当我在此存档中添加新查询时,它不会显示我排除的帖子。。。

$args = array( \'post_type\' => \'bio\', \'posts_per_page\' => 1 );
// My second query for CPT \'bio\'
$bio_query = new WP_Query( $args );

// The Loop
if ( $bio_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        $bio_query->the_post();
        // please, my custom post \'bio\' !...
    }
    /* Restore original Post Data */
    wp_reset_postdata();
} else {
    // no posts found
?>

这是不可能的(愚蠢的?)设置两个参数相反的查询?谢谢你的帮助!

2 个回复
最合适的回答,由SO网友:CodeMascot 整理而成

您已添加筛选器lm_exclude_biopre_get_posts. 因此,当您需要运行另一个查询时,可以删除过滤器以获得正常查询。您可以按如下方式卸下过滤器-

// Here we\'re removing the filter first. Then we are running the query.
remove_filter( \'pre_get_posts\', \'lm_exclude_bio\' );

$args = array( \'post_type\' => \'bio\', \'posts_per_page\' => 1 );
// My second query for CPT \'bio\'
$bio_query = new WP_Query( $args );

// The Loop
if ( $bio_query->have_posts() ) {
    while ( $bio_query->have_posts() ) {
        $bio_query->the_post();
        // please, my custom post \'bio\' !...
    }
    /* Restore original Post Data */
    wp_reset_postdata();
} else {
    // no posts found
}
?>
也在while ( $the_query->have_posts() ) 您在上出错$the_query. 是的$bio_query. 我已经修复了上述代码中的错误。

希望有帮助。

SO网友:David Navia

好的,首先我发现你的代码有误导性,请检查while 第一部分修订:

// The Loop
if ( $bio_query->have_posts() ) {
    while ( $bio_query->have_posts() ) {
        $bio_query->the_post();
        // please, my custom post \'bio\' !...
    }
    /* Restore original Post Data */
    wp_reset_postdata();
} else {
    // no posts found
?>
BUT 我认为您正在处理查询,因为您使用了两种不同的方法来攻击WP数据库。在你的第一段代码中(我想你把它放进了functions.php 文件),您正在干扰“主查询”对象,但您似乎从未在taxonomy-artiste.php 文件我建议这样做:

<?php
// Taxonomy-artiste.php


/*
 * The content of a page from a custom post (bio)
 */

$args = array( \'post_type\' => \'bio\', \'posts_per_page\' => 1 );
$bio_query = new WP_Query( $args );

// The Loop
if ( $bio_query->have_posts() ) {
    while ( $bio_query->have_posts() ) {
        $bio_query->the_post();
        the_content() // This will print the content of your bio post, stored in the global $post variable
    }
    /* Restore original Post Data */
    wp_reset_postdata();
} else {
    // no posts found
}

/*
 * And after, a list of post from another custom post 
 */

$args = array( \'post_type\' => \'#cpt1\', \'posts_per_page\' => \'put here the number of #cpt1 you want to load\' );
$other_query = new WP_Query( $args );

// The Loop
if ( $other_query->have_posts() ) {
    while ( $other_query->have_posts() ) {
        $other_query->the_post();
        the_content() // This will print the content of your other posts, stored in the global $post variable
    }
    /* Restore original Post Data */
    wp_reset_postdata();
} else {
    // no posts found
}

?>
我希望这对你有帮助。

相关推荐

如何读取WordPress$Query关联数组(散列)键的值

WordPress编程新手(来自更为传统的环境),并试图了解其一些“独特”特性。我们的网站上有一个目录页,此代码驻留在functions.php, 如果条件为true,则调整结果。if( $query->is_post_type_archive( \'directory\' ) ){ ...//do stuff } 我想知道如何获取is_post_type_archive 这就是“目录”当我对值使用测试时。。。var_dumb($query->is_post