Có cách nào dễ dàng để tạo một hộp meta có các tab như hộp meta Danh mục không?


13

Câu hỏi của tôi là khá nhiều tóm tắt trong tiêu đề. Tôi đang bỏ một hộp meta trong trang quản trị Bài đăng mới / Chỉnh sửa bài đăng và tôi muốn có thể thiết lập nó với các tab như hộp meta Danh mục có. Tôi cho rằng có một cách dễ dàng để hiểu được điều này, nhưng tôi không thể nhớ làm thế nào. Có ai biết không?


nhìn vào phần đánh dấu các danh mục mà meta có, sử dụng cùng cấu trúc và các lớp html và bạn sẽ có các tab
onetrickpony

Cảm ơn - đã làm điều đó và tôi nghĩ rằng JS (sử dụng đúng) ID để ẩn các tab không hoạt động. Không thể trùng lặp ID, vì vậy tôi có thể chỉ cần viết JS của riêng mình.
Jason Rhodes

Câu trả lời:


13

Đây là một ví dụ rất cơ bản ..

/*
    Code assumes it will be in the theme functions.php file
    Update the enqueue path if using it elsewhere
*/
add_action( 'add_meta_boxes_post', 'add_post_metabox' );

function add_post_metabox() {
    wp_enqueue_script( 'mytabs', get_bloginfo( 'stylesheet_directory' ). '/mytabs.js', array( 'jquery-ui-tabs' ) );
    add_meta_box( 'examplebox' , __('Example box'), 'my_example_metabox', 'post', 'side', 'core'/*,array()*/);
}

function my_example_metabox() {
    ?>
    <div id="mytabs">
        <ul class="category-tabs">
            <li><a href="#frag1">Tab 1</a></li>
            <li><a href="#frag2">Tab 2</a></li>
            <li><a href="#frag3">Tab 3</a></li>
        </ul>
        <br class="clear" />
        <div id="frag1">
            <p>#1 - Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
        </div>
        <div class="hidden" id="frag2">
            <p>#2 - Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
        </div>
        <div class="hidden" id="frag3">
            <p>#3 - Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
        </div>
    </div>
    <?php
}

JQuery cho mytabs.js được tham chiếu trong enqueue.

jQuery(document).ready(function($) {
    $("#mytabs .hidden").removeClass('hidden');
    $("#mytabs").tabs();
});

GHI CHÚ:

  • Được sử dụng bên trong một plugin, enqueue nên gọi plugins_url( '/mytabs.js', __FILE__ )thay cho get_bloginfochuỗi.
  • Liên kết neo cho mỗi tab phải khớp với ID của thành phần nội dung mà nó đề cập đến, vd. Frag1, Frag2, v.v.
  • Một lớp ẩn được áp dụng cho từng nội dung DIV sau lần đầu tiên để chúng bị ẩn khi tải trang (nếu không bạn sẽ nhận thấy một bước nhảy ngắn trong trang), lớp bị xóa sau khi tải trang, nếu không chúng sẽ bị ẩn.
  • Hành động hàng đầu nên được cập nhật để phản ánh loại bài đăng bạn muốn thực hiện add_action( "add_meta_boxes_YOURTYPE", 'add_post_metabox' );, tôi đã sử dụng posttrong ví dụ ..
  • Bạn sẽ cần hiển thị metabox ở bên cạnh để sử dụng CSS WordPress hiện có, đặt vị trí của các phần tử LI nội tuyến (bạn luôn có thể tải biểu định kiểu của riêng bạn để xử lý CSS).

Xem ở đây để biết thêm thông tin về cách định cấu hình tập lệnh tab.
http://docs.jquery.com/UI/Tabs

Mong rằng sẽ giúp ..


t31os, tôi đã thay đổi wp_enqueue_script thành: wp_enqueue_script ('mytabs', get_bloginfo ('template_directory'). ' và tôi đã đặt mytabs.js vào thư mục / js / trong thư mục gốc của chủ đề nhưng nó không hoạt động
Philip

1
@Philip - Mã là một ví dụ hoạt động, kiểm tra nguồn đầu ra và xác minh các đường dẫn enqueue đang được sản xuất chính xác .. (hoặc chúng đã được xuất ra cùng nhau) ..
t31os

tôi mắc lỗi ... xin lỗi vì sự nhầm lẫn! mọi thứ đều hoạt động tốt
Philip

@Philip - Không có vấn đề gì với người bạn đời, không có hại gì cả ..;)
t31os
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.