如何在CPT实现页面中使用WP_QUERY?

时间:2013-04-20 作者:JohnK

我找不到WP_Query 在我的自定义帖子类型存档页面中工作。有人能告诉我我做错了什么吗?如果有任何帮助,我将不胜感激。

这是密码archive-bulletin.php:

<?php get_header(); 
//wp_reset_query();
wp_reset_postdata();
$q = new WP_Query("post-type=bulletin" );
show_var("the query", $q);

if ($q->have_posts() ) : 
  while ($q->have_posts() ) : $q->the_post();
    echo "<h1>" . the_title(). "</h1>";
    the_content();
  endwhile;
endif;
wp_reset_postdata();
?>
而不是显示我的bulletin 贴子,仅显示post 职位。无论是否复位,结果都相似。(功能show_var() 只需包装var_dump() 在a中<pre>.)

这个bulletin 帖子按预期显示archive.php (即,当没有CPT存档模板时)。如果有帮助,下面是我用来在插件的主文件中注册帖子类型等的代码:

// register bulletin post-type
add_action( \'init\', \'bulletin_init\' );

function bulletin_init() {
  $labels = array(
    \'name\' => __("Bulletins"),
    \'singular_name\' => __("Bulletin"),
    \'menu_name\' => __("Bulletins"),
    \'add_new\' => _x(\'Add New\', \'bulletin\'),
    \'add_new_item\' => __("Add New Bulletin"),
    \'edit_item\' => __("Edit Bulletin"),
    \'new_item\' => __("New Bulletin"),
    \'view_item\' => __("View Bulletin"),
    \'search_items\' => __("Search Bulletins"),
    \'not_found\' => __("Bulletin Not Found"),
    \'not_found_in_trash\' => __("No bulletins found in trash"),
 );

  $args = array(
    \'labels\' => $labels,
    \'public\' => true,
    \'publicly_queryable\' => true,
    \'exclude_from_search\' => false,
    \'show_ui\' => true,
    \'show_in_menu\' => true, 
    \'query_var\' => true,
    \'rewrite\' => true,
    \'menu_position\' => 10,
    \'supports\' => array( 
      \'editor\', 
      \'excerpt\', 
      \'revisions\'
    ),
    \'taxonomies\' => array( \'\' ),
    \'has_archive\' => true
  );
  register_post_type("bulletin", $args );

  add_filter(\'manage_edit-bulletin_columns\', \'add_bulletin_columns\');
  add_action(\'manage_bulletin_posts_custom_column\', \'bulletin_columns_data\', 10, 2);
  add_filter( \'manage_edit-bulletin_sortable_columns\', \'bulletin_columns_sortable\' );
  add_filter( \'request\', \'bulletin_columns_orderby\' );
}
我当然把代码删减了archive-bulletin.php 突出根本问题。我更大的努力是创建一个CPT归档页面,该页面将显示不是按发布日期排序的帖子,而是按自定义元值排序的帖子(bulletin_date). 我看过那篇帖子here, 但它与不适用的细节纠缠在一起,我无法从中得到任何东西。

编辑以下是我的pre_get_posts 解决更大问题的功能:

function archive_bulletin_sort( $q ) {

    if( $q->is_post_type_archive(\'bulletin\') ){// && $q->is_main_query() ) {
        $q->set(\'meta_key\', \'bulletin_date\');
        $q->set(\'orderby\', \'meta_value\');
        $q->set(\'order\', \'DESC\');
    }
}
add_action( \'pre_get_posts\', \'archive_bulletin_sort\' );

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

如果这是主查询,则根本不应该创建新查询,只需运行普通循环,您就会看到来自CPT的帖子。

自定义查询不起作用的原因是post-type 不是有效参数,它是post_type (下划线,而不是连字符)。

如果您的目标是最终更改CPT归档的排序顺序,那么您的位置不对,不需要向模板页面添加任何内容,相反,您应该添加一个连接到pre_get_posts 更改主查询的参数。

结束

相关推荐

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

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

如何在CPT实现页面中使用WP_QUERY? - 小码农CODE - 行之有效找到问题解决它

如何在CPT实现页面中使用WP_QUERY?

时间:2013-04-20 作者:JohnK

我找不到WP_Query 在我的自定义帖子类型存档页面中工作。有人能告诉我我做错了什么吗?如果有任何帮助,我将不胜感激。

这是密码archive-bulletin.php:

<?php get_header(); 
//wp_reset_query();
wp_reset_postdata();
$q = new WP_Query("post-type=bulletin" );
show_var("the query", $q);

if ($q->have_posts() ) : 
  while ($q->have_posts() ) : $q->the_post();
    echo "<h1>" . the_title(). "</h1>";
    the_content();
  endwhile;
endif;
wp_reset_postdata();
?>
而不是显示我的bulletin 贴子,仅显示post 职位。无论是否复位,结果都相似。(功能show_var() 只需包装var_dump() 在a中<pre>.)

这个bulletin 帖子按预期显示archive.php (即,当没有CPT存档模板时)。如果有帮助,下面是我用来在插件的主文件中注册帖子类型等的代码:

// register bulletin post-type
add_action( \'init\', \'bulletin_init\' );

function bulletin_init() {
  $labels = array(
    \'name\' => __("Bulletins"),
    \'singular_name\' => __("Bulletin"),
    \'menu_name\' => __("Bulletins"),
    \'add_new\' => _x(\'Add New\', \'bulletin\'),
    \'add_new_item\' => __("Add New Bulletin"),
    \'edit_item\' => __("Edit Bulletin"),
    \'new_item\' => __("New Bulletin"),
    \'view_item\' => __("View Bulletin"),
    \'search_items\' => __("Search Bulletins"),
    \'not_found\' => __("Bulletin Not Found"),
    \'not_found_in_trash\' => __("No bulletins found in trash"),
 );

  $args = array(
    \'labels\' => $labels,
    \'public\' => true,
    \'publicly_queryable\' => true,
    \'exclude_from_search\' => false,
    \'show_ui\' => true,
    \'show_in_menu\' => true, 
    \'query_var\' => true,
    \'rewrite\' => true,
    \'menu_position\' => 10,
    \'supports\' => array( 
      \'editor\', 
      \'excerpt\', 
      \'revisions\'
    ),
    \'taxonomies\' => array( \'\' ),
    \'has_archive\' => true
  );
  register_post_type("bulletin", $args );

  add_filter(\'manage_edit-bulletin_columns\', \'add_bulletin_columns\');
  add_action(\'manage_bulletin_posts_custom_column\', \'bulletin_columns_data\', 10, 2);
  add_filter( \'manage_edit-bulletin_sortable_columns\', \'bulletin_columns_sortable\' );
  add_filter( \'request\', \'bulletin_columns_orderby\' );
}
我当然把代码删减了archive-bulletin.php 突出根本问题。我更大的努力是创建一个CPT归档页面,该页面将显示不是按发布日期排序的帖子,而是按自定义元值排序的帖子(bulletin_date). 我看过那篇帖子here, 但它与不适用的细节纠缠在一起,我无法从中得到任何东西。

编辑以下是我的pre_get_posts 解决更大问题的功能:

function archive_bulletin_sort( $q ) {

    if( $q->is_post_type_archive(\'bulletin\') ){// && $q->is_main_query() ) {
        $q->set(\'meta_key\', \'bulletin_date\');
        $q->set(\'orderby\', \'meta_value\');
        $q->set(\'order\', \'DESC\');
    }
}
add_action( \'pre_get_posts\', \'archive_bulletin_sort\' );

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

如果这是主查询,则根本不应该创建新查询,只需运行普通循环,您就会看到来自CPT的帖子。

自定义查询不起作用的原因是post-type 不是有效参数,它是post_type (下划线,而不是连字符)。

如果您的目标是最终更改CPT归档的排序顺序,那么您的位置不对,不需要向模板页面添加任何内容,相反,您应该添加一个连接到pre_get_posts 更改主查询的参数。

相关推荐

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

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