2011-10-11 21 views
6

Tôi đang cố gắng tạo mẫu liên kết cố định cho Loại tùy chỉnh, bao gồm một trong các loại phân loại của nó. Tên phân loại được biết ngay từ đầu (vì vậy tôi không cố gắng thêm hoặc kết hợp tất cả các phân loại của nó), nhưng giá trị sẽ theo động, tất nhiên.Liên kết cố định loại tùy chỉnh Wordpress chứa Slug phân loại

Thông thường, liên kết cố định Loại tùy chỉnh được tạo bằng cách sử dụng rewrite arg với thông số slug, nhưng tôi không thấy cách tôi có thể thêm biến động trong đó.

http://codex.wordpress.org/Function_Reference/register_post_type

Tôi đoán một giải pháp tùy chỉnh là cần thiết, nhưng tôi không chắc chắn về cách tiếp cận tốt nhất là unintrusive.

Có thực tiễn nào được biết cho điều này hoặc có ai đó đã tạo một cái gì đó tương tự gần đây không? Tôi đang sử dụng WP 3.2.1 btw.

Trả lời

3

Sau khi tìm kiếm thêm, tôi đã quản lý để tạo ra giải pháp khá thanh lịch bằng cách sử dụng bộ lọc custom_post_link.

Giả sử bạn có Loại tùy chỉnh project với Phân loại client. Thêm móc này:

function custom_post_link($post_link, $id = 0) 
{ 
    $post = get_post($id); 

    if(!is_object($post) || $post->post_type != 'project') 
    { 
    return $post_link; 
    } 
    $client = 'misc'; 

    if($terms = wp_get_object_terms($post->ID, 'client')) 
    { 
    $client = $terms[0]->slug; 

    //Replace the query var surrounded by % with the slug of 
    //the first taxonomy it belongs to. 
    return str_replace('%client%', $client, $post_link); 
    } 

    //If all else fails, just return the $post_link. 
    return $post_link; 
} 

add_filter('post_type_link', 'custom_post_link', 1, 3); 

Sau đó, khi đăng ký Type Tuỳ chỉnh, thiết lập arg rewrite như thế này:

'rewrite' => array('slug' => '%client%') 

Tôi đoán tôi nên đã đào sâu hơn trước khi hỏi, nhưng ít nhất chúng ta có một hoàn chỉnh giải pháp ngay bây giờ.

+0

Cảm ơn! Điều này làm việc cho tôi. Tôi phải đảm bảo rằng tệp '.htaccess' của mình có thể ghi được và sau đó đi vào 'Cài đặt> Permalinks' và'' Lưu Thay đổi'' để tệp hoạt động bình thường. '1' và' 3' là gì trong 'add_filter ('post_type_link', 'custom_post_link', 1, 3);'? Cảm ơn một lần nữa! –

+0

Tôi nghĩ rằng tôi đã có mọi thứ hoạt động, nhưng bây giờ tôi nhận được lỗi 404 trên tất cả các bài đăng thường xuyên/không phải tùy chỉnh-bài-loại của mình. Tôi đã đăng một câu hỏi về điều này nếu bạn có bất kỳ suy nghĩ về nó: http://stackoverflow.com/questions/9722984/wordpress-custom-permalink-with-dynamic-taxonomy-for-custom-post-type. –

+0

Khuyến khích mạnh mẽ việc sử dụng 'get_the_terms' thay vì 'wp_get_object_terms' là 'get_the_terms' sẽ lưu vào bộ nhớ cache kết quả. Sử dụng 'wp_get_object_terms' sẽ dẫn đến truy vấn đó chạy mỗi khi bộ lọc 'post_link' chạy, giống như 10 lần trên màn hình Chỉnh sửa bài đăng. Tham khảo https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/category-template.php#L1238 – TomHarrigan

Các vấn đề liên quan