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

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

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

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

33 голоса | спросил div 14 FriEurope/Moscow2012-12-14T17:23:23+04:00Europe/Moscow12bEurope/MoscowFri, 14 Dec 2012 17:23:23 +0400 2012, 17:23:23

6 ответов


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
}
ответил fuxia 15 SatEurope/Moscow2012-12-15T18:58:28+04:00Europe/Moscow12bEurope/MoscowSat, 15 Dec 2012 18:58:28 +0400 2012, 18:58:28
13

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

У меня была небольшая помощь великого Sewpafly, который разрабатывает плагин Post Thumbnail Editor . он поделился замечательной частью JS, которая предотвращает загрузку ALL MEDIA ITEMS и заставляет ее загружать только изображения «ЗАГРУЗИТЬ НА ЭТУ ПОЧТУ» по умолчанию.

Код

Файл: 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 загружает изображение FULL size. С тех пор я дал в разрешении средний размер.

ответил dave 16 Mayam13 2013, 05:54:22
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;
}

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

ответил Christine Cooper 15 SatEurope/Moscow2012-12-15T20:28:54+04:00Europe/Moscow12bEurope/MoscowSat, 15 Dec 2012 20:28:54 +0400 2012, 20:28:54
2

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

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 
}

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

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

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 4 PMpFri, 04 Apr 2014 21:34:45 +040034Friday 2014, 21:34:45
2

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

ответил numediaweb 30 Maypm15 2015, 19:03:27
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 22 MarpmTue, 22 Mar 2016 16:44:57 +03002016-03-22T16:44:57+03:0004 2016, 16:44:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132