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


33

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

借用截图

此问题来自另一个线程: 如何管理附件关系


您是否尝试过关闭所有其他插件,切换回默认主题,然后仅从toscho激活一个插件?可能是JS冲突。
kaiser 2012年

Answers:


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
}

非常感谢,toscho!<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 2013年

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文件,并使用admin_enqueue_scripts在functions.php中对其进行了调用。有关PHP和JS,请参见上面的GIST。

表现出色。希望优秀的wordpress专家可以在即将到来的更新中解决此问题,但就目前而言,Sewpafly拥有我找到的最佳解决方案。再次感谢伙伴。

我应该注意到,我刚刚发现查看器默认为我禁用(设置为0,0)的MEDIUM尺寸的图像,因为我没有使用并防止膨胀。当没有中等大小时,wordpress会加载完整大小的图像。从那以后我就启用了中等大小。


极为有用-是否可以仅通过某种类型的挂钩限制媒体库中显示的图像数量?
2013年

我个人也想添加此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:如果您想完全避免此问题,可以在弹出窗口中删除“设置特色图像”链接,并强制用户使用侧边栏链接(例如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;
}

就像我说的那样,这是一个绝望的解决方法,直到为主要代码发布解决方案为止。


我知道这一点,我没有时间扩展插件。
fuxia

我了解,如果您想在不久的将来找到延长时间的机会,我们将不胜感激。
克里斯汀·库珀

我用绝望的答案用“ wordaround”来更新此答案。如果您愿意,可以将其添加到您的答案中
克里斯汀·库珀

2

对于大多数这些解决方案,我最不满意的是,它在很多屏幕上都在闪烁,如果单击“ 特色图像”,它将恢复为显示所有图像。经过一番搜索,我认为找到了一个永久性的解决方案(感谢ÜnsalKorkmaz),看来可以解决这些问题。代码:

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

新版本的wordpress 对于媒体上传器使用了不同的方法(高级Backbonejs)。检查此插件中的代码,因为它适用于WordPress的新版本。


2
如果您实际共享代码,而不仅仅是一个链接,那会很好。
kaiser

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);
  }
})
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.