是否更改3.5中媒体库的默认视图?

时间:2012-12-14 作者:div

将媒体插入帖子时,是否有办法将媒体库的默认视图从“所有媒体项”更改为“上载到此帖子”?

borrowed Screenshot

这个问题的另一个线索是:How to manage attachment relationships

6 个回复
最合适的回答,由SO网友:fuxia 整理而成

我之前的回答中有两个小错误:

我忘了触发change 父级的事件以下是固定代码:

<?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
}

SO网友:dave

上面的JS唯一的问题是,它在页面加载后和已经开始下载所有媒体项目后切换选择框以触发更改。对于我的客户端来说,这是一个缓慢的T1,因为它同时下载了所有媒体时间和上传到此帖子的项目。

我得到了一位伟大的Sewpafly的帮助Post Thumbnail Editor 插件。他分享了一段很棒的JS,它阻止加载所有媒体项目,并强制加载默认情况下“上传到此帖子”的图像。

代码

File: 我的管理员。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);
        }
    });
});
File: 功能。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文件中,并在函数中调用它。带有admin\\u enqueue\\u脚本的php。PHP和JS请参见上面的要点。

工作出色。希望优秀的wordpress人员能在即将到来的更新中解决这个问题,但现在Sewpafly 有我找到的最好的解决方案。再次感谢老兄。

我应该注意到,我刚刚发现查看器默认为中等大小的图像,因为我没有使用和防止膨胀,所以禁用了这些图像(设置为0,0)。如果无法使用中等大小,wordpress将加载全尺寸图像。从那以后,我已经放弃了中等尺寸。

SO网友:Christine Cooper

@toscho啊,我在你的代码中发现了一个bug。请和我一起裸体。要复制问题,请执行以下操作:

1) 打开草稿栏。

2) 点击Add Media 按钮等待jQuery函数加载。

3) 在左侧,单击Set Featured Image 链接

4) 现在关闭媒体弹出窗口,在编辑后页面上,单击Set featured image 右侧栏上的链接。

5) 您将看到jQuery函数将无法工作。

但是,如果您单击Set featured image 先链接后编辑加载时,该功能将工作。您能否复制此问题并可能找到解决方案?很抱歉再次将此作为答案发布,但此平台目前没有为我提供更好的选择。

编辑:有人可以让toscho 知道这件事。你可以在他的回答中添加一条评论,我认为这应该会给他一个通知。我不能写评论,因为我没有足够的声誉。。。

EDIT 2: 如果您想拼命避免这个问题,可以删除弹出窗口中的“设置特色图像”链接,并强制用户使用侧栏链接(如3.5之前的WP版本)。使用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;
}
正如我所说,在主代码发布解决方案之前,这是一个绝望的修复。

SO网友:Howdy_McGee

大多数解决方案中我最不喜欢的是,它在很多屏幕上都会闪烁,如果你点击Featured Image 它将恢复显示所有图像。经过一些搜索,我想找到了一个永久的解决方案(感谢Ü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 
}
这将永久性地将媒体库设置为仅显示“上载到此帖子”,即使您尝试更改视图也不闪烁。

我添加了以下代码以完全删除选择框:

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
}

SO网友:numediaweb

wordpress的新版本使用了不同的方法(高级Backbonejs) 用于媒体上传器;从中检查代码this plugin 因为它适用于WordPress的新版本。

SO网友:Eilluj

这是我要设置的解决方案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);
  }
})

结束

相关推荐