如果POST_TYPE=CPT,为什么忽略wp_Query参数

时间:2021-09-14 作者:designlobby

我有几个不同的CPT设置;\'作业、事件、产品。它们显示在网站的各个页面上,在侧边栏或页脚区域。

使用以下代码,我的CPT获得输出,但除了“post\\u type”之外,所有$参数都被忽略。输出帖子时,就像“每页帖子数”=>-1.

如果我将“post\\u type”留空,则会加载博客帖子,并且所有参数都会按预期工作。

无论我将哪个CPT用于“post\\u type”,我都会遇到同样的问题。以下“工作”示例:

<?php
$args = array(         
    \'post_type\' => \'jobs\', 
    \'posts_per_page\' => 3,
    \'post_status\' => \'publish\',
    \'order\' => \'DESC\',
    \'orderby\' => \'menu_order\'
);
$wp_query = new WP_Query($args);
while ( $wp_query->have_posts() ) : $wp_query->the_post();
?>
    
// POST CONTENT
    
<?php endwhile; wp_reset_query(); ?>
CTP的设置如下:

add_action( \'init\', \'m_jobs_init\' );

function m_jobs_init() {
$labels = array(
    \'name\'               => __( \'Jobs\' ),
    \'singular_name\'      => __( \'Job\' ),
    \'menu_name\'          => __( \'Jobs\' ),
    \'name_admin_bar\'     => __( \'Jobs\' ),
    \'add_new\'            => __( \'Add Job\' ),
    \'add_new_item\'       => __( \'Add New Job\' ),
    \'new_item\'           => __( \'New Job\' ),
    \'edit_item\'          => __( \'Edit Job\' ),
    \'view_item\'          => __( \'View Job\' ),
    \'all_items\'          => __( \'All Jobs\' ),
    \'search_items\'       => __( \'Search Jobs\' ),
    \'parent_item_colon\'  => __( \'Parent Job\' ),
    \'not_found\'          => __( \'No Jobs Found\' ),
    \'not_found_in_trash\' => __( \'No Jobs Found in Trash\' ),
);

$args = array(
    \'labels\'             => $labels,
    \'public\'             => true,
    \'publicly_queryable\' => true,
    \'show_ui\'            => true,
    \'show_in_menu\'       => true,
    \'show_in_nav_menus\'  => true,
    \'query_var\'          => true,
    \'rewrite\'            => array( \'slug\' => \'jobs\' ),
    \'capability_type\'    => \'post\',
    \'has_archive\'        => true,
    \'hierarchical\'       => true,
    \'menu_position\'      => null,
    \'supports\'           => array( \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\', \'page-attributes\',\'post-formats\' )
);

register_post_type( \'jobs\', $args );
}
其他注释如下:

我有一个pre\\u get\\u posts过滤器,可以更改归档页面上的输出。我尝试删除它,但此查询没有任何更改。

我还检查了所有其他wp\\u查询循环是否正在使用wp\\u reset\\u postdata()关闭;但无济于事。

我还运行了var\\u dump($wp\\u query);我可以看到它看起来不太正确,但不确定错误是从哪里来的。截断的版本为:

object(WP_Query)[8153]
  public \'query\' => 
    array (size=5)
      \'post_type\' => string \'jobs\' (length=4)
      \'posts_per_page\' => int 3
      \'post_status\' => string \'publish\' (length=7)
      \'order\' => string \'DESC\' (length=4)
      \'paged\' => int 1
  public \'query_vars\' => 
    array (size=65)
      \'post_type\' => string \'jobs\' (length=4)
      \'posts_per_page\' => int -1
      \'post_status\' => string \'publish\' (length=7)
      \'order\' => string \'ASC\' (length=3)
      \'paged\' => int 1
第二个数据块来自哪里?这有\'posts_per_page\' => int -1\'order\' => string \'ASC\' 这可能是问题的原因。

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

我发现了问题,多亏了@vancoder的提示!

我将pre\\u get\\u posts附加到一个用于按字母顺序排列产品帖子的函数,这导致其他一切都不正常。它应该只针对产品!

/***************************************************************
 * Change Archive sorting
 * https://codex.wordpress.org/Alphabetizing_Posts
***************************************************************/

function course_dir_sort_order( $query ) {
    if ( $query->is_archive(\'products\') ) {
        $query->set( \'orderby\', \'title\' );
        $query->set( \'order\', \'ASC\' );
        $query->set( \'posts_per_page\', \'-1\' );
    }
}
add_action( \'pre_get_posts\', \'course_dir_sort_order\' );

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post