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



此问题的另一个出处是:
如何管理附件关系

评论

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

#1 楼

我先前的答案有两个小错误:


我忘记为父级触发change事件。
我在每次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!
您在这里放置的插件代码现在对我来说就像一个魅力! (如果有人可以将这个“答案”转换为评论并将状态设置为已回答,那将是很好的选择)

– div
2012-12-15 15:20

您是唯一可以勾选答案复选标记的人。您必须使用用于询问的帐户。我合并了两个帐户,您现在应该可以勾选对勾。 :)

– fuxia♦
2012-12-15 15:22



当您单击“添加媒体”按钮时,此非常精美的代码有效,但在单击“设置特色图像”时,此代码无效。有没有办法使它在那里正常工作?

–克里斯汀·库珀♦
2012-12-15在16:09



它在我的系统上也适用于特色图像。

– fuxia♦
2012年12月15日的16:14

这有一个潜在的问题,看来您正在选择具有value = uploaded的所有内容。另外,如果您想将JavaScript添加到每个上传程序的初始化中,请wp.media.view.UploaderWindow.prototype.on('ready',function(){console.log(jQuery('。media-modal-content')) ...您的代码在这里...});会更合适。

– NoBugs
13年1月9日,下午5:04

#2 楼

上面的JS唯一的问题是,它会在页面加载后和已经开始下载所有媒体项目之后切换选择框以触发更改。对于慢速T1上的我的客户,这将事情锁定了,因为它同时下载了ALL MEDIA TIMES和UPLOADED TO This This项目。

我从伟大的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)的中型图像,因为我没有使用并防止膨胀。当没有中等大小时,wordpress会加载完整大小的图像。从那以后我就启用了中等大小。

评论


极有帮助-可以不仅仅通过某种类型的钩子限制显示在媒体库中的图像数量?

–先天
13-10-15在11:26

就个人而言,我还喜欢添加此CSS,以隐藏媒体下拉列表:pastebin.com/1dP6SR4g

– Howdy_McGee♦
13年5月5日在21:14

不幸的是,该解决方案存在一个主要问题。请执行以下操作:1.在后编辑屏幕中打开一个帖子。 2.单击“设置特色图像”链接(单击“添加媒体”按钮之前)。 3.该代码到目前为止运行良好。现在,关闭窗口,然后单击“添加媒体”按钮。您会看到选择了“所有媒体”选项,但它显示的是上载的选项。为了切换到所有图像,您将需要切换到上载,然后再回到所有媒体。有人能解决这个问题吗?尽管如此,还是谢谢你。

–克里斯汀·库珀♦
2013年11月15日16:19



#3 楼

@toscho啊,我在您的代码中发现了一个错误。请裸露我。请执行确切的步骤来复制问题:

1)打开草稿。

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

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

4)现在关闭Media弹出窗口,然后在帖子编辑页面上,请点击右侧栏上的Set featured image链接。

5)您将看到jQuery函数不起作用。

但是,如果您单击了首先在发布后载入Set featured image链接,该功能将起作用。您能否复制此问题并可能找到解决方案?再次抱歉,将其发布为答案,但是该平台目前无法为我提供更好的选择。

编辑:有人可以让此事知道。您可以在他的回答中添加评论,我相信应该给他通知。我无法发表评论,因为我没有足够的声誉...

EDIT 2:如果您要拼命避免这个问题,可以在弹出窗口中删除“设置特色图片”链接,然后强制用户使用侧边栏链接(例如3.5之前的WP版本)。使用此在WP 3.5中引入的过滤器:正如我说的,这是一个拼命的修复,直到为主要代码发布解决方案为止。

评论


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

– fuxia♦
2012年12月16日在16:44

我了解,如果您想在不久的将来找到延长时间的机会,我们将不胜感激。

–克里斯汀·库珀♦
2012年12月16日16:47

我用绝望的答案用“ wordaround”来更新此答案。如果您愿意,可以将其添加到答案中...

–克里斯汀·库珀♦
2012年12月16日17:35



#4 楼

对于大多数这些解决方案,我最不满意的是,它在许多屏幕上都在闪烁,如果单击“特色图像”,它将恢复为显示所有图像。经过一番搜索,我认为找到了一个永久解决方案(感谢Ü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
}


#5 楼

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

评论


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

– kaiser
16年4月5日在23:53

#6 楼

这是我将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);
  }
})