Điều này có dễ không? Loại bài tùy chỉnh / permalink tùy chỉnh phân loại


11

Vì vậy, điều này đang khiến tôi hoàn toàn điên rồ. Tôi đã dành nhiều ngày cố gắng khắc phục điều này và tôi không thể hiểu tại sao điều này lại khó khăn đến vậy vì chắc chắn đây là một cấu trúc permalink rất phổ biến!

Tôi đã xem qua hàng trăm câu trả lời và bài đăng và dường như không ai trong số họ giải quyết vấn đề.

Tôi chỉ đơn giản muốn cấu trúc này:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

Vì vậy, tôi đạt được những điều sau đây:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

Mỗi lần tôi thử một cái gì đó, tôi nhận được lỗi 404 hoặc sự trì hoãn không hoạt động.

Tôi không hiểu tại sao điều này lại khó khăn đến vậy!

Bất kỳ trợ giúp thực sự đánh giá cao!

Cảm ơn bạn

================================================== ==== ================== THÔNG TIN BỔ SUNG ==================

Hiện tại tôi đang đăng ký loại bài đăng và phân loại như sau:

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

Nếu tôi đăng ký cả hai dưới dạng 'tài liệu', tôi nhận được 404 trên trang mysite.com/literature nhưng điều này sẽ hiển thị permalink của tôi dưới dạng: mysite.com/literature/books/mybook

Sau khi làm theo lời khuyên về câu hỏi này - Các loại bài đăng tùy chỉnh, phân loại và permalinks

Tôi đã thêm chức năng này vào chức năng của mình:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

Và thay đổi loại bài đăng của tôi thành 'slug' => 'literature/%literature_category%' Và thay đổi phân loại của tôi thành'slug' => 'literature'

Điều này hoạt động rất tốt ngoại trừ việc mysite.com/literaturephân trang không hoạt động nên tôi gặp lỗi 404 trên url sau:

mysite.com/literature/page/2/


Vì tò mò, bạn đã thử những gì cho đến nay?
Matthew Boynes

Câu trả lời này đã cho tôi gần nhất - wordpress.stackexchange.com/questions/5308/ Kẻ - nhưng sau đó nó không hoạt động với phân trang và plugin được đề xuất cũng không hoạt động
fxfuture

Thật tuyệt, rất vui vì tôi đã hỏi, điều đó đã giúp tôi tiết kiệm thời gian!
Matthew Boynes

Câu trả lời:


6

Làm theo lời khuyên về câu hỏi này như bạn đã làm, nhưng thêm nó vào mã của bạn:

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

Cuối cùng, đi tới Cài đặt> Permalinks và nhấn lưu. Nếu nó vẫn không hoạt động, hãy lưu lại permalinks của bạn. Đôi khi tôi cảm thấy như bạn phải cứu họ hai lần, nhưng ai biết được. Dù sao, hãy cho tôi biết làm thế nào bạn làm ra. Lưu ý rằng Câu trả lời tiêu chuẩn khoa học máy tính số 1 áp dụng: Nó hoạt động cho tôi ... ;-)

Từ vùng đất của TMI ...

Để tham khảo, lý do tại sao các trang không hoạt động theo mặc định là vì WordPress đặt quy tắc viết lại cho tài liệu /% doc_cách% /% cuốn sách% /% trang%, điều này hoàn toàn có ý nghĩa nếu bạn nghĩ về nó. Vì vậy, permalinks mặc định của bạn có các quy tắc cạnh tranh theo thứ tự này:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

Tất cả những gì chúng tôi thực sự làm ở đây là thay đổi thứ tự của những thứ này bằng cách bỏ đặt cái sau (chúng tôi có thể giữ nó lại, nhưng sau đó mỗi lần viết lại sau đó có thêm một biểu thức để chạy khi tải trang) và thêm nó vào đầu mảng.

Sự thật thú vị: Nếu bạn từng có một "cuốn sách" có tên "trang" và nó có nhiều trang, thứ tự này sẽ xung đột và các trang tiếp theo của nó sẽ không hoạt động!


Trời ạ, tôi nhận ra rằng cú pháp của tôi đã sai ở đây. Hài hước lắm, nó hoạt động với tôi và khi tôi sửa nó, nó không hoạt động. Tôi sẽ tiếp tục và cập nhật câu trả lời của mình khi tôi tìm ra ...
Matthew Boynes

Cảm ơn sự giúp đỡ của bạn Matthew. Tôi đã thử điều đó và không may nó không hoạt động. Tôi đã thêm nhiều thông tin vào câu hỏi của mình, hy vọng sẽ giải thích nó tốt hơn!
fxfuture

1
Ok, lời xin lỗi của tôi cho sự nhầm lẫn. Có một ít khí não ở đó (phải có một số đậu não gần đây). Câu trả lời của tôi đã được cập nhật, và một lần nữa nó hoạt động với tôi. Hãy nhớ lưu lại trên permalinks của bạn.
Matthew Boynes

1
Oh ok, tôi thấy câu hỏi cập nhật của bạn. Vì vậy, nó không phải là / văn học / tiểu thuyết / trang / 2 không hoạt động, đó là / văn học / trang / 2 không hoạt động, phải không? Nếu vậy, đó là một sửa chữa dễ dàng, chúng tôi sẽ làm điều tương tự lên một cấp độ
Matthew Boynes

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.