質問: urlに複数の分類法を追加する方法 urlに複数の分類法次のurlに複数の分類法を追加する方法 投稿タイプ: 商品 分類法: product_type 分類法: product_brand この商品の新しい商品を追加し、種類とブランドを選択します。新しい product を追加すると、2つの分類ボックス(product_typeとproduct_brand)があります。この新しい投稿を テスト製品1 としましょう。私たちが最初にしたいことは、私が扱っている製品の種類をチェックすることです。例えば、 携帯電話 としましょう。次に、私はその製品がどのブランドに属しているのかをチェックしたいと思います、 samsung。 " テスト製品1 "は、タイプ "携帯電話" およびブランド ")に関連付けられています。サムスン " 。 望ましい最終結果は次のとおりです。 //製品 "すべてのカスタム投稿を表示 // products /携帯電話 "分類法の携帯電話ですべてのカスタム投稿を見る /製品/携帯電話/サムスン/ "分類法が携帯電話 _および_ samsungであるすべてのカスタム投稿を表示 /製品/携帯電話/サムスン/ test-product-1 "製品を表示する(単一のカスタム投稿) 質問どのようにこれを可能にするでしょうか?私の最初の考えは、 "携帯電話" を "samsung" の親用語として持つという1つの分類法を使用することでした。実際に分類法とその用語を追加することはそれほど難しいことではありませんでした。しかし、それは他にもたくさんの問題を引き起こしました。とにかくそれは404の問題を与え、wpが特定のことを許さないのでそれはそのようには動きません。 wp.org"分類法 - アーカイブ - テンプレート これは、私がその構造を再考し、分類法とその用語を残しなければならないことにつながりました。 2番目の分類法を作成し、それとポストタイプを関連付けてurlに追加しませんか。確かに良い質問ですが、どうですか?
回答: この方法をチェックしてください、それはまだブランドアーカイブに関するいくつかのバグがあります http://pastebin.com/t8sxbdjy add_filter('post_type_link', 'products_type_link', 1, 3); function products_type_link($url, $post = null, $leavename = false) { // products only if ($post->post_type != self::custom_type_name) { return $url; } $post_id = $post->id; $taxonomy = 'product_type'; $taxonomy_tag = '%' . $taxonomy . '%'; // check if exists the product type tag if (strpos($taxonomy_tag, $url) < 0) { // replace taxonomy tag with the term slug: /products/%product_type%/samsumng/productname $url = str_replace($taxonomy_tag, '', $url); } else { // get the terms $terms = wp_get_post_terms($post_id, $taxonomy); if (is_array($terms) && sizeof($terms) > 0) { $category = $terms[0]; // replace taxonomy tag with the term slug: /products/%product_type%/samsumng/productname $url = str_replace($taxonomy_tag, $category->slug, $url); } } /* * brand tags */ $brand = 'product_brand'; $brand_tag = '%' . $brand . '%'; // check if exists the brand tag if (strpos($brand_tag, $url) < 0) { return str_replace($brand_tag, '', $url); } $brand_terms = wp_get_post_terms($post_id, $brand); if (is_array($brand_terms) && sizeof($brand_terms) > 0) { $brand_category = $brand_terms[0]; } // replace brand tag with the term slug: /products/cell-phone/%product_brand%/productname return str_replace($brand_tag, $brand_category->slug, $url); } function products_add_rewrite_rules() { global $wp_rewrite; global $wp_query; register_post_type('products', array( 'label' => 'products', 'description' => 'gvs products and services.', 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'capability_type' => 'post', 'hierarchical' => true, 'rewrite' => array('slug' => 'products'), 'query_var' => true, 'has_archive' => true, 'menu_position' => 6, 'supports' => array( 'title', 'editor', 'excerpt', 'trackbacks', 'revisions', 'thumbnail', 'author'), 'labels' => array ( 'name' => 'products', 'singular_name' => 'product', 'menu_name' => 'products', 'add_new' => 'add product', 'add_new_item' => 'add new product', 'edit' => 'edit', 'edit_item' => 'edit product', 'new_item' => 'new product', 'view' => 'view product', 'view_item' => 'view product', 'search_items' => 'search products', 'not_found' => 'no products found', 'not_found_in_trash' => 'no products found in trash', 'parent' => 'parent product'), ) ); register_taxonomy('product-categories', 'products', array( 'hierarchical' => true, 'label' => 'product categories', 'show_ui' => true, 'query_var' => true, 'rewrite' => array('slug' => 'products'), 'singular_label' => 'product category') ); $wp_rewrite->extra_permastructs['products'][0] = "/products/%product_type%/%product_brand%/%products%"; // product archive add_rewrite_rule("products/?$", 'index.php?post_type=products', 'top'); /* * product brands */ add_rewrite_rule("products/([^/]+)/([^/]+)/?$", 'index.php?post_type=products&product_brand=$matches[2]', 'top'); add_rewrite_rule("products/([^/]+)/([^/]+)/page/([0-9]{1,})/?$", 'index.php?post_type=products&product_brand=$matches[2]&paged=$matches[3]', 'top'); /* * product type archive */ add_rewrite_rule("products/([^/]+)/?$", 'index.php?post_type=products&product_type=$matches[1]', 'top'); add_rewrite_rule("products/([^/]+)/page/([0-9]{1,})/?$", 'index.php?post_type=products&product_type=$matches[1]&paged=$matches[1]', 'bottom'); // product type pagination // single product add_rewrite_rule("products/([^/]+)/([^/]+)/([^/]+)/?$", 'index.php?post_type=products&product_type=$matches[1]&product_brand=$matches[2]&products=$matches[3]', 'top'); flush_rewrite_rules(); }add_action('init', 'products_add_rewrite_rules');