Mặc dù không phải là cấu trúc URL mong muốn chính xác của bạn, bạn có thể nhận được:
/ sản phẩm
»Xem tất cả các bài viết tùy chỉnh
/ sản phẩm / loại / điện thoại di động
»Xem tất cả các bài đăng tùy chỉnh với điện thoại di động phân loại
/ sản phẩm / loại / điện thoại di động / nhãn hiệu / samsung
»Xem tất cả các bài đăng tùy chỉnh trong đó phân loại là điện thoại di động VÀ samsung
/ brand / samsung
»Xem tất cả các bài đăng tùy chỉnh trong đó phân loại là samsung
/ sản phẩm / thử nghiệm-sản phẩm-1
»Xem sản phẩm (bài đăng tùy chỉnh duy nhất)
mà không phải xác định quy tắc viết lại tùy chỉnh.
Nó yêu cầu bạn phải đăng ký phân loại và các loại bài tùy chỉnh theo một thứ tự cụ thể. Mẹo nhỏ là đăng ký bất kỳ phân loại nào trong đó sên bắt đầu bằng sên sau loại của bạn trước khi bạn đăng ký loại bài tùy chỉnh đó. Ví dụ: giả sử các sên sau:
product_type taxonomy slug = products/type
product custom_post_type slug = product
product custom_post_type archive slug = products
product_brand taxonomy slug = brand
Sau đó, bạn có thể đăng ký chúng theo thứ tự này:
register_taxonomy(
'products_type',
'products',
array(
'label' => 'Product Type',
'labels' => $product_type_labels,
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'args' => array( 'orderby' => 'term_order' ),
'rewrite' => array( 'slug' => 'products/type', 'with_front' => false ),
'has_archive' => true,
'query_var' => true,
)
);
register_post_type('products', array(
'labels' =>$products_labels,
'singular_label' => __('Product'),
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => 'product', 'with_front' => false ),
'has_archive' => 'products',
'supports' => array('title', 'editor', 'thumbnail', 'revisions','comments','excerpt'),
));
register_taxonomy(
'products_brand',
'products',
array(
'label' => 'Brand',
'labels' => $products_brand_labels,
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'args' => array( 'orderby' => 'term_order' ),
'rewrite' => array( 'slug' => 'brand', 'with_front' => false ),
'has_archive' => true,
'query_var' => true,
)
);
Nếu bạn hoàn toàn phải có một URL như:
/ sản phẩm / loại / điện thoại di động / nhãn hiệu / samsung / thử nghiệm sản phẩm-1
»Xem sản phẩm (bài đăng tùy chỉnh duy nhất)
Sau đó, bạn sẽ yêu cầu một quy tắc viết lại một cái gì đó như thế này:
add_rewrite_rule(
'/products/type/*/brand/*/([^/]+)/?',
'index.php?pagename='product/$matches[1]',
'top' );
CẬP NHẬT
/programming/3861291/multipl-custom-permalink- cấu trúc-in-wordpress
Đây là cách bạn xác định lại chính xác URL bài đăng duy nhất.
Đặt viết lại thành false cho loại bài tùy chỉnh. (Để nguyên kho lưu trữ) và sau đó sau khi đăng ký các nguyên tắc phân loại và bài đăng, cũng đăng ký các quy tắc viết lại sau đây.
'rewrite' => false
global $wp_rewrite;
$product_structure = '/%product_type%/%brand%/%product%';
$wp_rewrite->add_rewrite_tag("%product%", '([^/]+)', "product=");
$wp_rewrite->add_permastruct('product', $product_structure, false);
Sau đó, lọc post_type_link để tạo cấu trúc URL mong muốn - cho phép bỏ đặt các giá trị phân loại. Sửa đổi mã từ bài đăng được liên kết, bạn sẽ có:
function product_permalink($permalink, $post_id, $leavename){
$post = get_post($post_id);
if( 'product' != $post->post_type )
return $permalink;
$rewritecode = array(
'%product_type%',
'%brand%',
$leavename? '' : '%postname%',
$leavename? '' : '%pagename%',
);
if('' != $permalink && !in_array($post->post_status, array('draft', 'pending', 'auto-draft'))){
if (strpos($permalink, '%product_type%') !== FALSE){
$terms = wp_get_object_terms($post->ID, 'product_type');
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
$product_type = $terms[0]->slug;
else
$product_type = 'unassigned-artist';
}
if (strpos($permalink, '%brand%') !== FALSE){
$terms = wp_get_object_terms($post->ID, 'brand');
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
$brand = $terms[0]->slug;
else
$brand = 'unassigned-brand';
}
$rewritereplace = array(
$product_type,
$brand,
$post->post_name,
$post->post_name,
);
$permalink = str_replace($rewritecode, $rewritereplace, $permalink);
}
return $permalink;
}
add_filter('post_type_link', 'product_permalink', 10, 3);
Bây giờ tôi chỉ cần tìm ra cách viết lại url phân loại thương hiệu mà không cần thẻ thương hiệu hàng đầu và tôi phải khớp chính xác URL mong muốn của bạn.