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


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

borrowed Screenshot

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

Author: Community, 2012-12-14

6 answers

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

  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
}
 22
Author: fuxia, 2012-12-15 15:52:36

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

Мне немного помог великий Sewpafly, который разрабатывает Редактор миниатюр сообщений Плагин. он поделился отличной частью 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_скриптов. Смотрите СУТЬ выше как для PHP, так и для JS.

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

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

 13
Author: dave, 2013-05-16 17:55:52

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

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ 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;
}

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

 4
Author: Christine Cooper, 2012-12-16 17:34:15

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

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
}
 2
Author: Howdy_McGee, 2014-04-04 17:34:45

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

 2
Author: numediaweb, 2015-05-30 16:03:27

Это мое решение установить 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);
  }
})
 0
Author: Eilluj, 2016-03-22 14:11:25