指定特定页面以列出所有自定义类型

时间:2015-02-10 作者:Connel

在WordPress中,我可以指定哪个页面用作我的主页,哪个页面将列出我的所有帖子。

我创建了一个名为“Property”的自定义帖子类型。我知道我可以通过特定的URL访问所有自定义帖子类型为“Property”的帖子(/properties) 并在“我的导航”菜单上添加指向该页面的自定义链接。

我真正想要的是设置中的一个额外部分,用于分配一个特定页面,以列出具有“属性”自定义帖子类型的所有帖子。这样我就可以使用wp_列表_页面作为导航菜单的后备。

这可能吗?

编辑:

对不起,也许我应该说得更具体些。我正在发展我自己的主题。我想能够指定哪个页面用于列出我注册的自定义帖子类型的所有帖子,称为“属性”。下面是我用来注册帖子类型的代码。

$args = array(
        \'labels\' => array(
          \'name\'               => _x( \'Properties\', \'post type general name\', \'themename\' ),
          \'singular_name\'      => _x( \'Property\', \'post type singular name\', \'themename\' ),
          \'menu_name\'          => _x( \'Properties\', \'admin menu\', \'themename\' ),
          \'name_admin_bar\'     => _x( \'Property\', \'add new on admin bar\', \'themename\' ),
          \'add_new\'            => _x( \'Add New\', \'book\', \'themename\' ),
          \'add_new_item\'       => __( \'Add New Property\', \'themename\' ),
          \'new_item\'           => __( \'New Property\', \'themename\' ),
          \'edit_item\'          => __( \'Edit Property\', \'themename\' ),
          \'view_item\'          => __( \'View Property\', \'themename\' ),
          \'all_items\'          => __( \'All Properties\', \'themename\' ),
          \'search_items\'       => __( \'Search Properties\', \'themename\' ),
          \'parent_item_colon\'  => __( \'Parent Property:\', \'themename\' ),
          \'not_found\'          => __( \'No properties found.\', \'themename\' ),
          \'not_found_in_trash\' => __( \'No properties found in trash.\', \'themename\' )
        ),
        \'public\'        => true,
        \'has_archive\'   => true,
        \'rewrite\'       => array(
          \'slug\'          => \'properties\'
        ),
        \'menu_icon\'     => \'dashicons-admin-home\',
        \'menu_position\' => 5,
        \'supports\'      => array(
          \'title\', 
          \'editor\', 
          \'thumbnail\'
        ),
        \'taxonomies\'    => array(
          \'nc_prop_cat\'
        )
      );
      register_post_type(\'nc_prop\', $args);
我想在我的主题的阅读设置中添加另一个下拉框(如下面的屏幕截图所示)。目前,我的博客页面列出了我的所有帖子,我希望我的属性页面列出我的所有属性。

Reading settings

为了澄清,我希望避免使用硬编码的主题文件,例如页面属性。因此,如果用户删除页面,它不会破坏主题。

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

posts页面是硬编码到core中的一个特例,它允许将页面的主查询转换为posts查询。在这种情况下,贴子页面不再是传统意义上的“页面”—is_page 如果为false,则无法访问页面内容等。。对任何其他类型的页面执行此页面查询以发布与主查询的查询转换是很棘手的,它涉及到相当多的请求操作。我从来没能让它百分之百地工作而不出问题。

您可以更轻松地执行的是page-properties.php 模板文件,使用template filters.

其思想是将您想要的页面的ID存储为属性页面,并过滤模板层次结构,以使用自定义模板覆盖该页面的模板。这还有一个额外的好处,即允许您使用页面的两个内容,同时为帖子类型的帖子运行二级自定义循环。

function wpd_properties_page_template( $page_template = \'\' ){
    // globalize the queried page object, so we can access its ID
    global $post;
    // check if this page\'s ID is equal to the value stored in the option
    if( $post->ID == get_option( \'my_page_id_option\' ) ){
        // locate the special template
        // this also lets a child theme override the parent theme version
        $page_template = locate_template( \'your-special-template.php\', false );
    }
    return $page_template;
}
add_filter( \'page_template\', \'wpd_properties_page_template\' );

结束

相关推荐

Responsive Admin Themes

我在看这个管理主题的示例(http://themepixels.com/main/themes/demo/webpage/shamcey/dashboard.html). 至于标签为“Navigation”的左侧管理栏,有没有一种方法可以在不使用插件的情况下实现这种类型的左侧仪表板管理菜单?我想用css、js或Jquery来实现这一点,任何处理编码的东西都可以。