通过自定义分类过滤和查询我的产品(自定义帖子类型)

时间:2011-06-09 04:20:15

标签: php wordpress custom-post-type

所以我的WordPress CMS已经走了很长的路(我已经学到了很多关于WordPress的知识。我已经创建了一个名为Products的自定义帖子类型,它位于:

add_action( 'init', 'create_product_post_type' );

function create_product_post_type() 
{
    $labels = array(
        'name' => _x('Products', 'post type general name'),
        'singular_name' => _x('Product', 'post type singular name'),
        'add_new' => _x('Add New', 'product'),
        'add_new_item' => __('Add New Product'),
        'edit_item' => __('Edit Product'),
        'new_item' => __('New Product'),
        'view_item' => __('View Product'),
        'search_item' => __('Search Products'),
        'not_found' => __('No products found'),
        'not_found_in_trash' => __('No products found in Trash'),
        'parent_item_colon' => '',
        'menu_name' => 'Products'           
        );

    $args = array(
        'label' => __('Products'),
        'labels' => $labels,
        'public' => true,
        'can_export' => true,
        'show_ui' => true,
        '_builtin' => false,
        'capability_type' => 'post',
        'menu_icon' => get_bloginfo('template_url').'/functions/images/product.png',
        'hierarchical' => false,
        'rewrite' => array( "slug" => "product" ),
        'supports' => array('title'), //MAYBE add thumbnail later!
        'show_in_nav_menus' => true

        );

        register_post_type( 'product', $args);  
}

然后是一个名为Category的自定义分类法:

function create_productcategory_taxonomy() {
    $labels = array(
        'name' => _x( 'Categories', 'taxonomy general name' ),
        'singular_name' =>_x( 'Category', 'taxonomy singular name' ),
        'search_items' =>  __( 'Search Categories' ),
        'popular_items' => __( 'Popular Categories' ),
        'all_items' => __( 'All Categories' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Edit Product Category' ),
        'update_item' => __( 'Update Product Category' ),
        'add_new_item' => __( 'Add New Product Category' ),
        'new_item_name' => __( 'New Product Category' ),
        'separate_items_with_commas' => __( 'Separate categories with commas' ),
        'add_or_remove_items' => __( 'Add or remove product categories' ),
        'choose_from_most_used' => __( 'Choose from the most used categories' )
        );

    register_taxonomy('productcategory', 'product', array (
        'label' => __('Product Category'),
        'labels' => $labels,
        'hierarchical' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'product-category'),
        )); 
}

我在wp-admin菜单中创建了一个名为Products的页面,其中包含我制作的自定义模板。转到http://localhost/project/products会显示它,并列出所有产品的帖子类型。我还为single-products.php制作了一个页面,显示了单个产品帖子类型的详细信息。

我不确定该怎么做是创建一种通过上面的自定义分类Category过滤我的产品的方法。假设我有一个Widget产品。这个Widget有一个Category的'Spring Loaded'。如果我想查看单个小部件,我可以链接到http://localhost/project/products/widget,它会弹出single-product.php页面并显示Widget,因为我格式化了页面。但我想链接到“Spring Loaded”类别并列出该自定义类别中的所有产品。我相信每个类别都有它自己的slug(例如弹簧加载)。如果我转到http://localhost/project/product-category/spring-loaded它会显示一个页面,但我不知道它正在加载哪个文件,否则我可以修改输出。现在它将每个产品加载为普通帖子(包含日期,评论等)。

所以我的问题是如何过滤这些类别?或者我要修改哪个文件以更改从http://localhost/project/product-category/spring-loaded链接的页面的输出?

我希望这是有道理的。谢谢!

更新: AHHHH。它现在有意义了。我改变了这个:

 register_taxonomy('productcategory', 'product', array (
        'hierarchical' => true,
        'rewrite' => array( 'slug' => 'product-category'),
        ));

到此:

 register_taxonomy('productcategory', 'product', array (
        'hierarchical' => true,
        'rewrite' => array( 'hierarchical' => true),
        ));

即使我不确定它到底做了什么。

我还创建了一个taxonomy-productcategory.php并做了一些快速的格式化和测试,但确实有效。我可以转到http://localhost/project/productcategory/,它会列出该类别的所有产品。

现在我需要像你一样改变我的重写规则吗?老实说我不明白htaccess是如何工作的所以我不知道我是否需要改变它。谢谢!

1 个答案:

答案 0 :(得分:2)

几周前我几乎遇到了同样的问题。 它已在Wordpress.SE上回答:https://wordpress.stackexchange.com/questions/14451/taxonomy-terms-and-template-files