开发者

Wordpress custom post types, custom taxonomies, URL's and themes

开发者 https://www.devze.com 2023-03-16 14:02 出处:网络
I\'m trying to set up a Wordpress 3 website in which I have, through a plugin, created a custom post type called a \"product\". Along with this custom post type I\'ve created a custom taxonomy so the

I'm trying to set up a Wordpress 3 website in which I have, through a plugin, created a custom post type called a "product". Along with this custom post type I've created a custom taxonomy so the products can be placed in a category without interfering with the blog categories. This is all working great through the Admin system. So far so good.

The problem arises when I want to access the products and the categories. Ideally I have the following URL structure:

/products - Shows a page with all the categories.

/products/category - Shows all the products assigned with the given 'category`.

/products/product - Shows a single product.

I've been reading through various sources over the past few days and the information I'm looking for seems to be very fragmented making me very much confused about the problem and not knowing if what I want is actually possible 开发者_开发问答or not within the context of Wordpress.

The next thing I'm very confused about is how the URL's illustrated in the example above tie in with the theme engine. I do not fully comprehend which templates I should create or which hooks I should tie into to make this work.

So, the basic question is; How can I make my custom post types and custom taxonomies map to the correct theme template?


I know this is an old question but this might help someone else…

To accomplish what you're after you'll need to use the register_post_type and register_taxonomy WordPress functions.

You'll need something similar to this in your functions.php file

// 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 );

You can use a custom post generator like http://generatewp.com/post-type/ to make your life easier when working through all the options.

It's important once you register your custom post types and taxonomies to flush the DNS rules once you add this code or make any amendments to the URL structure. Do this by visiting the WordPress admin Settings -> Permalinks page and it'll automatically flush the DNS rules.

Edit the following files in your theme folder to control the template displayed:

  • archive-product.php
  • taxonomy-product-category.php
  • single-product.php
0

精彩评论

暂无评论...
验证码 换一张
取 消