Thay đổi sự xuất hiện của đầu vào phân loại tùy chỉnh


14

Tôi đang làm việc trên một trang web sẽ sử dụng một vài nguyên tắc phân loại tùy chỉnh (đối với các loại bài đăng tùy chỉnh). Tôi đã chọn tạo một số phân loại theo thứ bậc vì phương pháp nhập giá trị (hộp kiểm) là mong muốn cho trang web này hơn là đầu vào dạng tự do của các phân loại không phân cấp. Tuy nhiên, điều tôi thực sự muốn là có thể sử dụng các đầu vào nút radio thay vì các hộp kiểm. Ngoài ra, tôi muốn xóa danh sách thả xuống được sử dụng để chọn mục chính trong phân loại. ảnh chụp màn hình

Tôi đang đi về điều này sai cách? Tôi có nên bắt đầu với các nguyên tắc phân loại không phân cấp và thay đổi các phương thức nhập liệu trên đó không? Tôi hoàn toàn cởi mở với đầu vào và sẵn sàng trả lời bất kỳ câu hỏi nào hoặc cung cấp thêm thông tin nếu tôi có thể.


+1 Câu hỏi hay. Điều này cũng sẽ tốt cho một dự án tôi đang làm. Hơn nữa, có phân loại tùy chỉnh là một menu thả xuống thay vì danh sách "danh mục".
Zack

Vâng, một thả xuống cũng sẽ là tuyệt vời.
Travis Northcutt


Thay vì cố gắng sửa đổi metabox hiện có, những gì bạn có thể làm là xóa metabox mặc định cho phân loại đã cho, sau đó đăng ký riêng của bạn để gọi một chức năng tùy chỉnh hiển thị các thuật ngữ trong một nhóm radio và điều này sẽ liên kết với hai liên kết được cung cấp ở trên bằng cách khai trương.
t31os

Câu trả lời:


13

Chắc chắn, chỉ cần sử dụng CSS và 'admin_head'hook để làm cho nó biến mất. Tôi tin rằng đây là những gì bạn đang tìm kiếm?

Mục phân loại phân cấp trên trang bài đăng WordPress mà không có cha mẹ
(nguồn: mikechinkel.com )

Chỉ cần thêm phần sau vào functions.phptệp của chủ đề hoặc vào .phptệp của plugin mà bạn có thể đang viết. Lưu ý rằng tôi đã bao gồm một 'init'cái móc để xác định loại bài đăng "Nhà" và phân loại "Tắm" để những người khác có thể dễ dàng làm theo ví dụ hơn. Cũng lưu ý rằng nếu phân loại của bạn được đặt tên là Tắm ", bạn sẽ cần thay đổi bộ chọn CSS #newbaths_parentthay vì #newbath_parent:

add_action('admin_head','remove_bath_parents');
function remove_bath_parents() {
  global $pagenow;
  if (in_array($pagenow,array('post-new.php','post.php'))) { // Only for the post add & edit pages
    $css=<<<STYLE
<style>
<!--
#newbath_parent {
  display:none;
}
-->
</style>
STYLE;
    echo $css;
  }
}
add_action('init','add_homes_and_baths');
function add_homes_and_baths() {
  register_post_type('home',
    array(
      'label'           => 'Homes',
      'public'          => true,
      'rewrite'         => array('slug' => 'homes'),
      'hierarchical'    => false,
    )
  );
  register_taxonomy('bath', 'home', array(
    'hierarchical'    => true,
    'label'           => 'Baths',
    'rewrite'         => array('slug' => 'baths' ),
    )
  );
}

CẬP NHẬT

Vì vậy, có vẻ như tôi đã bỏ lỡ phần nút radio của câu hỏi. Thật không may, WordPress không làm điều này dễ dàng nhưng bạn có thể thực hiện bằng cách sử dụng bộ đệm đầu ra PHP (thông qua các hàm ob_start()ob_get_clean()chức năng.) Chỉ cần tìm một hook trước khi metabox là output ( 'add_meta_boxes') và hook sau khi nó là output ( 'dbx_post_sidebar') và sau đó tìm kiếm bắt được HTML cho 'checkbox'và thay thế bằng 'radio', lặp lại màn hình và hoàn thành! Mã sau:

add_action('add_meta_boxes','mysite_add_meta_boxes',10,2);
function mysite_add_meta_boxes($post_type, $post) {
  ob_start();
}
add_action('dbx_post_sidebar','mysite_dbx_post_sidebar');
function mysite_dbx_post_sidebar() {
  $html = ob_get_clean();
  $html = str_replace('"checkbox"','"radio"',$html);
  echo $html;
}

Và bằng chứng:

Ảnh chụp màn hình hiển thị các nguyên tắc phân loại bằng nút radio
(nguồn: mikechinkel.com )


1
"Nhìn Ma, không có trường cha mẹ!" Mike, bạn làm tôi cười! : D
Michal Mau

@maugly - Đó là mặc định của tôi. : D
MikeSchinkel

@haha - Vui mừng bạn thích nó. :)
MikeSchinkel

Tuyệt vời, như mọi khi.
Travis Northcutt

1
@tnorthcutt - Thành thật mà nói, tôi khuyên bạn nên mã hóa metabox của riêng bạn. Đó là những gì tôi đã làm và nó thực sự không khó cho việc này. Chỉ cần làm một nguồn xem và khớp <input><select>tên và bạn thậm chí sẽ không phải làm bất cứ điều gì để nắm bắt được phân loại; WordPress sẽ làm điều đó cho bạn. HOẶC, sử dụng trường tùy chỉnh và bỏ qua phân loại có thể quá mức cho việc này.
MikeSchinkel

2

hoặc, nếu bạn lười biếng có thể sử dụng plugin này: Giao diện người dùng phân loại giá trị đơn

(Tôi thà thêm điều này như một nhận xét vào câu trả lời của Mike vì nó chủ yếu làm điều tương tự - nhưng tôi chưa thể thêm nhận xét)


Thật không may cập nhật trong 2 năm :( Đây thực sự là điều WP nên thêm hỗ trợ cốt lõi cho nhiều người sẽ sử dụng các nguyên tắc phân loại một đối tượng nếu nó là một tùy chọn (nghĩa là sử dụng phân loại thay vì meta khi hiệu suất truy vấn là quan trọng).
jerclarke 23/2/2016
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.