Thay đổi chế độ xem mặc định của Thư viện phương tiện trong 3.5?


33

Khi chèn phương tiện vào bài đăng, có cách nào để thay đổi chế độ xem mặc định của Thư viện phương tiện từ "Tất cả các mục phương tiện" thành "Đã tải lên bài đăng này" không?

ảnh chụp màn hình mượn

Có một chủ đề khác mà câu hỏi này được trích xuất từ: Cách quản lý các mối quan hệ đính kèm


Bạn đã thử tắt tất cả các plugin khác, quay lại chủ đề mặc định và sau đó chỉ kích hoạt một plugin từ toscho? Có thể là một xung đột JS.
kaiser

Câu trả lời:


22

Có hai lỗi nhỏ trong câu trả lời trước của tôi:

  1. Tôi quên kích hoạt changesự kiện cho phụ huynh.
  2. Tôi đã gọi hàm trên mỗi cuộc gọi AJAX, làm cho các lựa chọn khác không thể thực hiện được.

Đây là mã cố định:

<?php
/**
 * Plugin Name: Pre-select post specific attachments
 */

add_action( 'admin_footer-post-new.php', 'wpse_76048_script' );
add_action( 'admin_footer-post.php', 'wpse_76048_script' );

function wpse_76048_script()
{
    ?>
<script>
jQuery(function($) {
    var called = 0;
    $('#wpcontent').ajaxStop(function() {
        if ( 0 == called ) {
            $('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
            called = 1;
        }
    });
});
</script>
    <?php
}

Cảm ơn bạn rất nhiều, toscho! <br> Mã plugin bạn bỏ ở đây hoạt động như một cơ duyên đối với tôi bây giờ! (thật tuyệt nếu ai đó có thể chuyển đổi "câu trả lời" này thành một bình luận và đặt trạng thái thành câu trả lời)
div

Bạn là người duy nhất có thể đánh dấu vào dấu kiểm trả lời . Bạn phải sử dụng tài khoản bạn đã sử dụng để hỏi. Tôi đã hợp nhất cả hai tài khoản, bạn sẽ có thể đánh dấu vào dấu kiểm ngay bây giờ. :)
fuxia

3
Mã rất thanh lịch này hoạt động khi bạn nhấp vào Add Medianút nhưng không phải khi bạn nhấp vào Set featured image. Có cách nào để làm cho nó hoạt động ở đó không?
Christine Cooper

Nó cũng hoạt động trên hệ thống của tôi cho hình ảnh đặc trưng quá.
fuxia

1
Điều này có một vấn đề tiềm ẩn, có vẻ như bạn đang chọn mọi thứ có giá trị = đã tải lên. Ngoài ra, nếu bạn muốn thêm javascript để khởi tạo mọi trình tải lên, wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});sẽ phù hợp hơn.
NoBugs

13

Vấn đề duy nhất với JS ở trên là nó bật hộp chọn để kích hoạt thay đổi sau khi tải trang và sau khi nó bắt đầu tải xuống TẤT CẢ CÁC MẶT HÀNG CỦA MEDIA. Đối với khách hàng của tôi trên một chiếc T1 chậm, điều này đã khóa mọi thứ khi nó tải xuống cả TẤT CẢ THỜI GIAN MEDIA và TẢI LÊN các mục POST này cùng nhau.

Tôi đã có một số trợ giúp từ Sewpafly tuyệt vời, người phát triển Plugin Post Thumbnail Editor . ông đã chia sẻ một đoạn mã JS tuyệt vời ngăn chặn tải TẤT CẢ CÁC MẶT HÀNG MEDIA và buộc nó chỉ tải hình ảnh "TẢI LÊN BÀI VIẾT NÀY" theo mặc định.

Mật mã

Tập tin: myadmin.js

jQuery(function($) {
    var called = 0;
    $('#wpcontent').ajaxStop(function() {
        if ( 0 == called ) {
            $('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
            called = 1;
        }
    });
  var oldPost = wp.media.view.MediaFrame.Post;
    wp.media.view.MediaFrame.Post = oldPost.extend({
        initialize: function() {
            oldPost.prototype.initialize.apply( this, arguments );
            this.states.get('insert').get('library').props.set('uploadedTo', wp.media.view.settings.post.id);
        }
    });
});

Tập tin: Hàm.php

add_action('admin_enqueue_scripts', 'add_admin_js');
function add_admin_js() {
    wp_enqueue_script('admin_js', get_bloginfo( 'template_directory' ) . '/js/admin.js');
}

Mã tương tự trên GitHub: https://gist.github.com/fishnyc22/5593693

Tôi đã bỏ nó vào một tệp JS và gọi nó trong hàm.php với admin_enqueue_scripts. Xem GIST ở trên cho cả PHP và JS.

Hoạt động rực rỡ. Hy vọng rằng những người dùng wordpress tốt sẽ khắc phục điều này trong bản cập nhật sắp tới, nhưng hiện tại, Sewpafly có giải pháp tốt nhất mà tôi đã tìm thấy. Cảm ơn một lần nữa bạn thân.

Tôi nên lưu ý rằng tôi vừa phát hiện ra rằng người xem mặc định là hình ảnh có kích thước MEDIUM mà tôi đã tắt (được đặt thành 0,0) vì tôi không sử dụng và ngăn chặn sự phình to. Khi kích thước trung bình không có sẵn, wordpress tải hình ảnh kích thước ĐẦY ĐỦ. Tôi đã kể từ khi kích hoạt kích thước trung bình.


cực kỳ hữu ích - người ta không chỉ giới hạn số lượng hình ảnh hiển thị trong thư viện phương tiện với một số loại hook?
Bẩm sinh

Cá nhân, tôi cũng muốn thêm CSS này sẽ ẩn phần thả xuống phương tiện: pastebin.com/1dP6SR4g
Howdy_McGee

1
Thật không may, giải pháp này bị một vấn đề lớn. Thực hiện như sau: 1. Mở một bài đăng trong màn hình chỉnh sửa. 2. Nhấp vào liên kết "Đặt hình ảnh nổi bật" (trước khi nhấp vào nút Thêm phương tiện). 3. Mã hoạt động tốt cho đến nay. Bây giờ, đóng cửa sổ và sau đó nhấp vào nút Thêm phương tiện. Bạn sẽ thấy tùy chọn "Tất cả phương tiện" được chọn nhưng nó đang hiển thị những tùy chọn đã tải lên. Để chuyển đổi tất cả các hình ảnh, bạn sẽ cần chuyển đổi để tải lên, sau đó quay lại tất cả các phương tiện truyền thông. Có ai có một giải pháp cho vấn đề này? Cảm ơn bạn vì điều này dù sao.
Christine Cooper

4

@toscho À, tôi tìm thấy một lỗi trong mã của bạn. Hãy trần với tôi. Thực hiện chính xác như sau để nhân rộng vấn đề:

1) Mở một bài dự thảo.

2) Nhấp vào Add Medianút. Đợi chức năng jQuery tải.

3) Ở bên trái của bạn, nhấp vào Set Featured Imageliên kết.

4) Bây giờ hãy đóng cửa sổ bật lên Media và trên trang chỉnh sửa bài đăng, nhấp vào Set featured imageliên kết trên thanh bên phải.

5) Bạn sẽ thấy hàm jQuery sẽ không hoạt động.

Tuy nhiên, nếu bạn đã nhấp vào Set featured imageliên kết đầu tiên khi tải bài chỉnh sửa, chức năng sẽ hoạt động. Bạn có thể tái tạo vấn đề này và có thể tìm ra giải pháp? Xin lỗi một lần nữa vì đã đăng bài này như một câu trả lời nhưng nền tảng này hiện không cung cấp cho tôi một lựa chọn tốt hơn.

EDIT: Ai đó có thể xin vui lòng cho toscho biết về điều này. Bạn có thể làm điều này bằng cách thêm một nhận xét vào câu trả lời của anh ấy mà tôi tin rằng nên thông báo cho anh ấy. Tôi không thể viết bình luận vì tôi không có đủ danh tiếng ...

EDIT 2 : Nếu bạn muốn tránh tuyệt đối vấn đề này, bạn có thể xóa liên kết "Đặt hình ảnh nổi bật" trong cửa sổ bật lên và buộc người dùng sử dụng liên kết thanh bên (như các phiên bản WP trước 3.5). Sử dụng bộ lọc này đã được giới thiệu trong WP 3.5:

add_filter( 'media_view_strings', 'cor_media_view_strings' );
/**
 * @see wp-includes|media.php
 */
function cor_media_view_strings( $strings ) {
    unset( $strings['setFeaturedImageTitle'] );
    return $strings;
}

Như tôi đã nói, đây là một sửa chữa tuyệt vọng cho đến khi có một giải pháp được đăng cho mã chính.


Tôi nhận thức được điều này, tôi chỉ không có thời gian để mở rộng plugin.
fuxia

Tôi hiểu, nếu bạn muốn tìm thời gian trong tương lai gần để mở rộng nó, tất cả chúng ta sẽ biết ơn.
Christine Cooper

Tôi đã cập nhật câu trả lời này bằng một "từ" cho những người tuyệt vọng. toscho bạn có thể thêm câu này vào câu trả lời của mình nếu bạn muốn ...
Christine Cooper

2

Điều chính tôi không thích ở hầu hết các giải pháp này là nó nhấp nháy trên rất nhiều màn hình và nếu bạn nhấp vào Ảnh nổi bật, nó sẽ quay trở lại để hiển thị tất cả hình ảnh. Sau một số tìm kiếm, tôi nghĩ đã tìm thấy một giải pháp lâu dài (Cảm ơn Ünsal Korkmaz ) có vẻ như nó giải quyết được những vấn đề này. Mật mã:

add_action( 'admin_footer-post-new.php', 'media_library_filter' );
add_action( 'admin_footer-post.php', 'media_library_filter' );
function media_library_filter() { 
    ?>
    <script type="text/javascript">
        jQuery(document).on("DOMNodeInserted", function(){
            jQuery('select.attachment-filters [value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
        });
    </script>
    <?php 
}

mà vĩnh viễn đặt thư viện phương tiện chỉ hiển thị "Đã tải lên bài đăng này", ngay cả khi bạn cố gắng thay đổi chế độ xem có nghĩa là không nhấp nháy.

Tôi đã thêm mã này để đi kèm với nó để loại bỏ hoàn toàn hộp chọn:

add_action( 'admin_head', 'hide_select_ddl' );
function hide_select_ddl()
{
    ?>
<style type="text/css">
    div.media-menu a.media-menu-item:nth-child(3) {display:none!important;}
    .media-frame-content .attachment-filters:first-child {
        display:none;
    }
</style>
    <?php
}

2

Các phiên bản mới của wordpress sử dụng một cách tiếp cận khác ( Backbonejs nâng cao ) cho trình tải lên phương tiện; Kiểm tra mã từ plugin này vì nó hoạt động cho các phiên bản mới của WordPress.


2
Sẽ thật tuyệt nếu bạn thực sự chia sẻ mã - không chỉ là một liên kết.
kaiser

0

Đây là giải pháp của tôi để đặt thành dateFiltertháng hiện tại, mặc dù nó kích hoạt AJAX hai lần.

.on('content:render:browse', function(a, b) {
  var filter = a.toolbar.secondary.get('dateFilter');           
  if (filter.model) {
    filter.model.set(filter.filters[1].props);
  }
})
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.