Wordpress自定义帖子类型,自定义分类,URL和主题

时间:2011-06-28 22:36:24

标签: wordpress wordpress-theming custom-post-type custom-taxonomy

我正在尝试建立一个Wordpress 3网站,我通过插件创建了一个名为“产品”的自定义帖子类型。除了这个自定义帖子类型,我还创建了一个自定义分类,因此可以将产品放在一个类别中,而不会干扰博客类别。这一切都通过Admin系统运行良好。到目前为止一切都很好。

当我想访问产品和类别时出现问题。理想情况下,我有以下URL结构:

/products - 显示包含所有类别的页面。

/products/category - 显示分配了给定“类别”的所有产品。

/products/product - 显示单个商品。

过去几天我一直在阅读各种来源,我正在寻找的信息似乎非常分散,让我对这个问题非常困惑,不知道我想要的是否真的可能在Wordpress的上下文。

接下来我非常困惑的是,上面示例中说明的URL如何与主题引擎相关联。我不完全理解我应该创建哪些模板或者我应该使用哪些钩子来使其工作。

所以,基本问题是;如何使自定义帖子类型和自定义分类法映射到正确的主题模板?

1 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但这可能有助于其他人...

要在您需要使用register_post_typeregister_taxonomy WordPress功能后完成所需的工作。

你的functions.php文件

中需要类似的东西
// Register Custom Post Type
function products() {
    $labels = array(
        'name'                => 'Products',
        'singular_name'       => 'Product',
        'menu_name'           => 'Product',
        'parent_item_colon'   => 'Parent Product:',
        'all_items'           => 'All Products',
        'view_item'           => 'View Product',
        'add_new_item'        => 'Add New Product',
        'add_new'             => 'New Product',
        'edit_item'           => 'Edit Product',
        'update_item'         => 'Update Product',
        'search_items'        => 'Search products',
        'not_found'           => 'No products found',
        'not_found_in_trash'  => 'No products found in Trash'
    );
    $args = array(
        'label'               => 'product',
        'description'         => 'Product information pages',
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'excerpt', ),
        'taxonomies'          => array( 'category' ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'menu_icon'           => '',
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post'
    );
    register_post_type( 'product', $args );
}
// Hook into the 'init' action
add_action( 'init', 'products', 0 );

// Register Custom Taxonomy
function product-category()  {
    $labels = array(
        'name'                       => 'Product Category',
        'singular_name'              => 'Product Categories',
        'menu_name'                  => 'Product Category',
        'all_items'                  => 'All Product Categories',
        'parent_item'                => 'Parent Product Category',
        'parent_item_colon'          => 'Parent Product Category:',
        'new_item_name'              => 'New Product Category Name',
        'add_new_item'               => 'Add New Product Category',
        'edit_item'                  => 'Edit Product Category',
        'update_item'                => 'Update Product Category',
        'separate_items_with_commas' => 'Separate product categories with commas',
        'search_items'               => 'Search product categories',
        'add_or_remove_items'        => 'Add or remove product categories',
        'choose_from_most_used'      => 'Choose from the most used product categories',
    );
    $rewrite = array(
        'slug'                       => 'product-category',
        'with_front'                 => true,
        'hierarchical'               => true,
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => false,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => true,
        'query_var'                  => 'product-category',
        'rewrite'                    => $rewrite,
    );
    register_taxonomy( 'product-category', 'product', $args );

}
// Hook into the 'init' action
add_action( 'init', 'product-category', 0 );

您可以使用http://generatewp.com/post-type/等自定义帖子生成器,让您在处理所有选项时更轻松。

一旦您添加此代码或对URL结构进行任何修改,注册自定义帖子类型和分类以刷新DNS规则就很重要。通过访问WordPress管理员设置 - >来做到这一点。永久链接页面,它将自动刷新DNS规则。

编辑主题文件夹中的以下文件以控制显示的模板:

  • 归档product.php
  • 分类学产品category.php
  • 单product.php