Изменить вид по умолчанию библиотеки мультимедиа в 3.5?

33

При вставке мультимедиа в сообщение, есть ли способ изменить вид по умолчанию библиотеки мультимедиа со «Все элементы мультимедиа» на «Загружен в этот пост»?

заимствованный скриншот

Есть еще одна тема, из которой был извлечен этот вопрос: Как управлять отношениями вложений

ДИВ
источник
Вы пытались отключить все остальные плагины, вернуться к теме по умолчанию, а затем просто активировать ту из toscho? Может быть конфликт JS.
Кайзер

Ответы:

22

В моем предыдущем ответе были две незначительные ошибки:

  1. Я забыл вызвать changeсобытие для родителя.
  2. Я вызывал функцию при каждом вызове AJAX, делая невозможным выбор других элементов.

Вот фиксированный код:

<?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
}
Фуксия
источник
Большое спасибо, Тошо! <br> Плагин-код, который вы добавили сюда, работает для меня как шарм! (было бы неплохо, если бы кто-то мог преобразовать этот «ответ» в комментарий и установить статус «отвечено»)
div
Вы единственный, кто может поставить галочку напротив ответа . Вы должны использовать учетную запись, которую вы использовали для запроса. Я объединил оба аккаунта, теперь вы можете поставить галочку. :)
fuxia
3
Этот очень элегантный код работает, когда вы нажимаете Add Mediaкнопку, но не когда вы нажимаете кнопку Set featured image. Есть ли способ заставить его работать там?
Кристина Купер
Это работает в моей системе для избранных изображений тоже.
fuxia
1
Это имеет потенциальную проблему, похоже, вы выбираете все, что имеет значение = загружен. Кроме того, если вы хотите добавить javascript для инициализации каждого загрузчика, wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});было бы более целесообразным.
NoBugs
13

Единственная проблема с JS, описанным выше, заключается в том, что он переключает поле выбора для запуска изменения после загрузки страницы и после того, как она уже начала загружать ВСЕ МЕДИА-ПУНКТЫ. Для моего клиента на медленном T1 это заблокировало вещи, так как он загружал вместе ВСЕ ВРЕМЯ НОСИТЕЛЕЙ и элементы ЗАГРУЗКИ НА ЭТО ПОСТ.

Мне помогла великая Sewpafly, которая разработала плагин Post Thumbnail Editor . он поделился отличным фрагментом JS, который предотвращает загрузку ВСЕХ НОСИТЕЛЕЙ МЕДИА и заставляет его загружать только изображения, «ПОГРУЖЕННЫЕ В ЭТОТ ПОСТ» по умолчанию.

Код

Файл: 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);
        }
    });
});

Файл: functions.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');
}

Тот же код на GitHub: https://gist.github.com/fishnyc22/5593693

Я поместил это в файл JS и вызвал его в functions.php с admin_enqueue_scripts. См. GIST выше для PHP и JS.

Работает блестяще. Надеюсь, хорошие WordPress исправят это в следующем обновлении, но на данный момент Sewpafly имеет лучшее решение, которое я нашел. Еще раз спасибо, приятель.

Должен отметить, что я только что обнаружил, что по умолчанию программа просмотра использует изображения со СРЕДНИМ размером, которые я отключил (установил на 0,0), поскольку я не использовал и не предотвращал раздувание. Когда средний размер недоступен WordPress загружает изображение полного размера. С тех пор я дал в активном среднем размере.

Дейв
источник
чрезвычайно полезно - нельзя ли просто ограничить количество изображений, отображаемых в библиотеке мультимедиа, с помощью какого-либо типа хуков?
Врожденный
Лично я также хотел бы добавить этот CSS, который будет скрывать раскрывающийся список медиа: pastebin.com/1dP6SR4g
Howdy_McGee
1
К сожалению, это решение имеет одну серьезную проблему. Выполните следующие действия: 1. Откройте сообщение на экране редактирования. 2. Нажмите ссылку «Установить рекомендуемое изображение» (перед тем, как нажать кнопку «Добавить мультимедиа»). 3. Код работает нормально до сих пор. Теперь закройте окно и нажмите кнопку «Добавить медиа». Вы увидите, что опция «Все медиа» выбрана, но она отображает загруженные. Чтобы переключиться на все изображения, вам нужно переключиться на загруженный, а затем вернуться ко всем медиафайлам. У кого-нибудь есть решение этой проблемы? Спасибо за это, тем не менее.
Кристина Купер
4

@ toscho Ах, я нашел ошибку в вашем коде. Пожалуйста, держись со мной. Чтобы повторить проблему, сделайте следующее:

1) Откройте черновик сообщения.

2) Нажмите на Add Mediaкнопку. Подождите, пока загрузится функция jQuery.

3) Слева нажмите на Set Featured Imageссылку.

4) Теперь закройте всплывающее окно «Медиа» и на странице редактирования поста нажмите на Set featured imageссылку в правой боковой панели.

5) Вы увидите, что функция jQuery не будет работать.

Однако, если бы вы Set featured imageсначала щелкнули ссылку при загрузке после редактирования, функция сработает. Можете ли вы повторить эту проблему и, возможно, найти решение? Извините еще раз за публикацию этого как ответ, но эта платформа не предлагает мне лучший вариант в настоящее время.

РЕДАКТИРОВАТЬ: Может кто-нибудь, пожалуйста, дайте toscho знать об этом. Вы можете сделать это, добавив комментарий к его ответу, который, я считаю, должен дать ему уведомление. Я не могу писать комментарии, так как мне не хватает репутации ...

РЕДАКТИРОВАТЬ 2 : Если вы хотите отчаянно избежать этой проблемы, вы можете удалить ссылку «Установить рекомендуемое изображение» во всплывающем окне и заставить пользователя использовать ссылку на боковую панель (как версии WP до 3.5). Используйте этот фильтр, который был представлен в 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;
}

Как я уже сказал, это отчаянное исправление, пока не будет опубликовано решение для основного кода.

Кристина Купер
источник
Я знаю об этом, у меня просто нет времени, чтобы расширить плагин.
fuxia
Я понимаю, что если бы вы нашли время в ближайшем будущем продлить его, мы все были бы благодарны.
Кристина Купер
Я обновил этот ответ «словесным» для отчаявшихся. То есть вы можете добавить это в свой ответ, если хотите ...
Кристина Купер
2

Главное, что мне не понравилось в большинстве этих решений, это то, что они мигали на многих экранах, и если вы нажмете на Избранное изображение, оно вернется к отображению всех изображений. После некоторых поисков я думаю, что нашел постоянное решение (благодаря Юнсалу Коркмазу ), которое, похоже, решает эти проблемы. Код:

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 
}

который постоянно устанавливает в медиатеке только «Загружен на этот пост», даже если вы пытаетесь изменить вид, что означает отсутствие мигания.

Я добавил этот код, чтобы сопровождать его, чтобы полностью удалить поле выбора:

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
}
Howdy_McGee
источник
2

Новые версии WordPress используют другой подход (продвинутый Backbonejs ) для загрузки мультимедиа; Проверьте код из этого плагина, как он работает для новых версий WordPress.

numediaweb
источник
2
Было бы неплохо, если бы вы на самом деле поделились кодом, а не просто ссылкой.
Кайзер
0

Это мои решения для установки dateFilterна текущий месяц, хотя он запускает AJAX дважды.

.on('content:render:browse', function(a, b) {
  var filter = a.toolbar.secondary.get('dateFilter');           
  if (filter.model) {
    filter.model.set(filter.filters[1].props);
  }
})
Eilluj
источник