Trang danh sách phân loại tùy chỉnh?


11

Tôi đang làm việc trên một trang web nhà hàng và tôi có một loại bài đăng tùy chỉnh cho các món ăn, như vậy:

$args = array(
    'labels'=> $labels,
    'public'=> true,
    'publicly_queryable'=>true,
    'show_ui'=>true,
    'show_in_nav_menus'=>true,
    'query_var'=>'dish',
    'rewrite'=>true,
    'capability_type'=>'post',
    'hierarchicial'=>false,
    'menu_position'=>5,
    'supports'=>array(
        'title',
        'editor',
        'thumbnail',
        'excerpt',
        'custom-fields',
        'revisions'
    )   
);  

register_post_type('dish', $args);

Một ví dụ về một trong những cách phân loại tùy chỉnh mà tôi muốn sử dụng là:

register_taxonomy('Main Ingredient', array('dish'), array(
    'hierarchical' => true,
    'label' => 'Main Ingredient',
    'singular_label' => 'Main Ingredient',
    'query_var'=>true,
    'rewrite' => true)
);

Các nguyên tắc phân loại tùy chỉnh đang hoạt động tốt trong quản trị viên và tôi có thể truy cập myurl.com/main-ingredient/porkvà xem danh sách tất cả các món ăn có thịt lợn trong đó.

Những gì tôi muốn làm là có thể đạt myurl.com/main-ingredientđược và có được một danh sách tất cả các giá trị thành phần chính khác nhau.

Tôi tìm thấy tài liệu tham khảo này , đó chính xác là những gì tôi đang cố gắng làm.

Nhưng giải pháp không hiệu quả với tôi - Tôi vẫn nhận được 404 khi đi đến myurl.com/main-ingredient

Bất kỳ đề xuất về cách tốt nhất để làm điều này?

Câu trả lời:


20

WordPress không có gì tích hợp để cung cấp trang "chỉ mục" cho phân loại của bạn vì câu hỏi của bạn ngụ ý nên có (và tôi đồng ý, nên có! Nhưng không có.)

Thay vào đó, bạn phải hack nó và một cách để làm điều đó là tạo một trang có tên "Thành phần chính" với một main-ingredientsên URL và gán cho nó một mẫu trang cho chủ đề của bạn mà bạn sẽ tạo (có thể) được gọi là "Danh sách thành phần chính" :

Ảnh chụp màn hình hiển thị nơi đặt Mẫu trang trong WordPress
(nguồn: mikechinkel.com )

Đây là một điểm khởi đầu; có thể sử dụng tên tệp page-main-ingredient-list.php cho mẫu trang của bạn:

<?php
/*
Template Name: Main Ingredient List
*/
get_header();
$main_ingredients = get_terms('main-ingredient');
foreach($main_ingredients as $main_ingredient) {
  $dishes = new WP_Query(array(
    'post_type' => 'dish',
    'post_per_page'=>-1,
    'taxonomy'=>'main-ingredient',
    'term' => $main_ingredient->slug,
  ));
  $link = get_term_link(intval($main_ingredient->term_id),'main-ingredient');
  echo "<h2><a href=\"{$link}\">{$main_ingredient->name}</a></h2>";
  echo '<ul>';
  while ( $dishes->have_posts() ) {
    $dishes->the_post();
    $link = get_permalink($post->ID);
    $title = get_the_title();
    echo "<li><a href=\"{$link}\">{$title}</a></li>";
  }
  echo '</ul>';
}
get_footer();

Và sau đây là trang trông như thế nào với một số dữ liệu giả trên trang web thử nghiệm của tôi:

Ảnh chụp màn hình của trang Chỉ mục phân loại cho trang web WordPress


Xin chào Mike, vâng tôi đã làm điều đó. Nó không giúp được gì.

@Josh - Tôi đã thêm mã bạn tìm thấy ở đây vào functions.phptệp của chủ đề của mình và sau đó truy cập http://wp30.dev/main-ingredient/chicken/ ( wp30.devlà trang web thử nghiệm cục bộ của tôi) và có ảnh chụp màn hình này . Vì vậy, nếu nó không hoạt động, bạn có một số plugin hoặc một số mã khác khiến nó không hoạt động.
MikeSchinkel

Cảm ơn đã trả lời Mike. Điều đó làm việc cho tôi, nhưng không phải là vấn đề tôi đang cố gắng giải quyết. Tôi đang cố gắng để có được một danh sách các thành phần chính bằng cách đi đến cấp cao nhất của phân loại. Nói cách khác, nếu bạn loại bỏ "gà" khỏi URL của mình, bạn sẽ nhận được một trang 404. Đó là vấn đề tôi đang gặp phải.

@Josh - Được rồi, tôi thấy điều đó bây giờ. Xin lỗi, tôi đã trả lời quá nhiều câu hỏi ngày hôm nay. FYI, không có cách "tích hợp" nào trong WordPress để xử lý những gì bạn đang yêu cầu. Nó sẽ rất có ý nghĩa cho nó ở đó tự động, nhưng hiện tại thì không. Tôi sẽ viết một bản cập nhật đó là một cách giải quyết.
MikeSchinkel

3
@Josh - "nhưng tôi ghét mất chức năng tích hợp tuyệt vời của việc xem và điều hướng bài đăng thông qua thuật ngữ phân loại": Tôi phải thiếu thứ gì đó vì tôi không thấy bạn mất gì với thứ này?
MikeSchinkel
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.