Làm cách nào để thêm tab mới vào trình quản lý tải lên phương tiện với bộ hình ảnh tùy chỉnh?


18

Tôi muốn thêm tab mới để tải lên trình quản lý và trong danh sách hình ảnh từ

theme_folder/images/patterns

Tôi đã thử một cái gì đó như thế này để thêm một tab nhưng nó không hoạt động với tôi vì nó đang thêm các tab ở bên cạnh trình quản lý phương tiện nhưng khi tải lên hình ảnh thì tab đó không hiển thị.

function custom_media_upload_tab_name( $tabs ) {
    $newtab = array( 'tab_slug' => 'Patterns' );
    return array_merge( $tabs, $newtab );
}

add_filter( 'media_upload_tabs', 'custom_media_upload_tab_name' );

function custom_media_upload_tab_content() {
    // Add you content here.
    echo 'Hello content';
}
add_action( 'media_upload_tab_slug', 'custom_media_upload_tab_content' );

nói chính xác đây là nơi tôi muốn thêm một tab mới và trong tab đó tôi muốn liệt kê hình ảnh từ thư mục chủ đề.

nhập mô tả hình ảnh ở đây

Tôi biết rằng trình quản lý phương tiện truyền thông cần phải được viết lại cho nó nhưng thành thật mà nói tôi không biết bắt đầu từ đâu. Có vẻ như tôi cần phải viết mẫu hoàn toàn mới cho người quản lý phương tiện để đạt được điều này.

Tôi đã đi qua tất cả các đề xuất nhưng dường như không ai đang đọc câu hỏi. Như đã khuyên "Tôi đã thử một cái gì đó như thế này để thêm một tab nhưng nó không hoạt động với tôi vì nó đang thêm các tab ở bên cạnh trình quản lý phương tiện nhưng khi tải lên hình ảnh thì tab đó không hiển thị."

Vì vậy, bây giờ không ai có thể tìm ra giải pháp cho việc này.

Câu trả lời:


6

Đây là một chủ đề cũ nhưng đối với tôi vẫn như có liên quan. Tôi đã loay hoay và đã đưa ra mã này để thêm một tab phương tiện ở đây, có lẽ ai đó muốn tiếp tục làm thế nào để xử lý nội dung cho tab? :)

add_action('admin_enqueue_scripts', function(){
    wp_enqueue_script( 'my-media-tab', plugin_dir_url( __FILE__ ) . '/js/mytab.js', array( 'jquery' ), '', true );
});

Và sau đó là tệp js:

var l10n = wp.media.view.l10n;
wp.media.view.MediaFrame.Select.prototype.browseRouter = function( routerView ) {
    routerView.set({
        upload: {
            text:     l10n.uploadFilesTitle,
            priority: 20
        },
        browse: {
            text:     l10n.mediaLibraryTitle,
            priority: 40
        },
        my_tab: {
            text:     "My tab",
            priority: 60
        }
    });
};

EDIT: Ok, vậy. Để xử lý nội dung tôi chưa tìm thấy một cách hay để làm điều này bởi wp.media. Giải pháp hiện tại của tôi là 2 người cho vay, một để mở thư viện phương tiện và một để nhấp vào menu bộ định tuyến phương tiện;

jQuery(document).ready(function($){
    if ( wp.media ) {
        wp.media.view.Modal.prototype.on( "open", function() {
            if($('body').find('.media-modal-content .media-router a.media-menu-item.active')[0].innerText == "My tab")
                doMyTabContent();
        });
        $(wp.media).on('click', '.media-router a.media-menu-item', function(e){
            if(e.target.innerText == "My tab")
                doMyTabContent();
        });
    }
});

hàm doMyTabContent (); chỉ là một cái gì đó như;

function doMyTabContent() {
    var html = '<div class="myTabContent">';
    //My tab content here
    html += '</div>';
    $('body .media-modal-content .media-frame-content')[0].innerHTML = html;
}

Tôi rất chắc chắn rằng điều này có thể được thực hiện theo một cách tinh tế hơn nhiều. Bất cứ ai đọc điều này và có một giải pháp tốt hơn, xin vui lòng điền vào :-)


thnx cho điều này sẽ nhìn vào nó. Cũ hay không nó không bao giờ được giải quyết. và đây chính xác là những gì tôi đã yêu cầu prntscr.com/kse5yk . Bạn đã làm rất tốt!
Benn

bạn đã thử kết hợp wordpress.stackexchange.com/a/190604/67176 và tạo tab của bạn chưa? Tôi chắc chắn 99% nó có thể hoạt động đặc biệt nếu các tab có cùng id.
Benn

1
Vâng, tôi đã xem xét điều đó trước tiên, nhưng tôi không thực sự là một fan hâm mộ của giải pháp iframe đi kèm với giải pháp này. Nhận dữ liệu hình ảnh với tin nhắn iframe. Hiển thị nội dung là một chuyện, nhưng xử lý các hành động là một chuyện khác. :) Có lẽ tôi đang thiếu một cái gì đó.
gubbfett

Xin chào @Benn vừa bị cuốn vào những cơn ác mộng wp.media một lần nữa. Mã tôi đã cung cấp ở trên nơi tôi thực hiện "doMyTabContent" chỉ kích hoạt trên một sự kiện. Ví dụ: Tải một bài đăng, nhấp vào thêm hình ảnh nổi bật và đóng. Sau khi nhấp vào này, thêm phương tiện cho bài đăng và nó không tải bất cứ thứ gì, có lẽ vì wp.media ở trong một phiên bản mới (tab vẫn còn đó tho). Tôi không chắc làm thế nào để di chuyển ở đây. Bạn đã thực hiện bất kỳ tiến bộ nào liên quan đến việc thêm một tab và chèn phương tiện theo một cách nào đó chưa? Bạn muốn chia sẻ một số mã? :)
gubbfett

@gubbfett bạn đã bao giờ tìm ra giải pháp cho vấn đề này chưa?
RaajTram

5

Theo WordPress Codex, bạn có thể thêm tab tùy chỉnh trong trình tải lên phương tiện như thế này:

// add the tab
add_filter('media_upload_tabs', 'my_upload_tab');
function my_upload_tab($tabs) {
    $tabs['mytabname'] = "My Tab Name";
    return $tabs;
}

// call the new tab with wp_iframe
add_action('media_upload_mytabname', 'add_my_new_form');
function add_my_new_form() {
    wp_iframe( 'my_new_form' );
}

// the tab content
function my_new_form() {
    echo media_upload_header(); // This function is used for print media uploader headers etc.
    echo '<p>Example HTML content goes here.</p>';
}

Hy vọng nó sẽ giúp bạn.


7
Để rõ ràng, tab đó không được thêm vào đầu hộp modal, mà vào thanh bên trái. Tôi không thể tìm thấy cách thực sự thêm tab vào đầu tab Chèn Media. Tôi cũng gặp vấn đề khi cố gắng sử dụng các kiểu css đã có sẵn vì nội dung được chèn vào iframe. Điều đó có nghĩa là bạn sẽ cần phải thêm css của riêng bạn để hiển thị hình ảnh chính xác. Và chỉ cần hoàn thành câu trả lời, bạn có thể sử dụng hàm php scandir () để lấy tất cả các mục trong thư mục ảnh.
gdaniel

-1
   function axcoto_genify_media_menu($tabs) {
            $newtab = array('genify'  => __('Axcoto Genify', 'axcotogenify'));
            return array_merge($tabs, $newtab);
            }
            add_filter('media_upload_tabs', 'axcoto_genify_media_menu');

           array('genify' => __('Axcoto Genify', 'axcotogenify'));


        function axcoto_genify_media_process() {
        media_upload_header();
        echo 'hello';
        }
        function axcoto_genify_media_menu_handle() {
        return wp_iframe( 'axcoto_genify_media_process');
        }



 if ( ( is_array( $content_func ) && ! empty( $content_func[1] ) && 0 === strpos( (string) $content_func[1], 'media' ) ) || 0 === strpos( $content_func, 'media' ) )
        wp_enqueue_style( 'media' );

1
Mã của bạn có đầy đủ các lỗi cú pháp. Vui lòng sử dụng cú pháp php thích hợp làm cú pháp mà bạn đang sử dụng thậm chí không tồn tại trong php. Ngoài ra, vui lòng giải thích mã của bạn làm gì và cách thức hoạt động. Cảm ơn bạn
Pieter Goosen ngày

Tôi vừa chỉnh sửa mã. Mã làm việc của nó. Hãy thử mã này.
sarath

2
Vui lòng đọc lại bình luận của tôi, nhưng bỏ qua phần cú pháp. Mã bán phá giá không phải là một câu trả lời chất lượng. Vui lòng thêm một lời giải thích về cách mã của bạn hoạt động và những gì nó làm
Pieter Goosen ngày
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.