问题描述

将媒体插入文章时,是否有办法将 Media-Library 的默认视图从 「所有媒体项目」 更改为 「已上传到此帖子」?

还有另一个线程,其中提取了以下问题:How to manage attachment relationships

最佳解决方案

我以前的答案有两个轻微的错误:

  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
}

次佳解决方案

JS 上面唯一的问题是它切换选择框以在页面加载之后以及在其已经开始下载所有媒体项目之后触发更改。对于我的客户端,在一个缓慢的 T1 这个锁定的东西,因为它同时下载所有媒体时间和上载到这个 POST 项目。

我从一个开发 Post Thumbnail Editor 插件的伟大的 Sewpafly 得到了一些帮助。他分享了一个伟大的 JS,阻止所有媒体项目的加载,并迫使它默认加载图像 「上传到此 POST」 。

代码

文件: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 文件中,并用 function_php 和 admin_enqueue_scripts 一起调用它。请参阅上面的 GIST 以及 PHP 和 JS 。

工作辉煌希望很好的 WordPress 人在即将到来的更新中解决这个问题,但是现在 Sewpafly 已经找到了最好的解决方案。再次感谢好友

我应该注意到,我刚刚发现,由于我没有使用并防止膨胀,所以浏览器默认为已禁用的 MEDIUM 大小的图像 (设置为 0,0) 。当中等大小不可用时,wordpress 加载了全尺寸图像。我已经给了中等大小。

第三种解决方案

@toscho 啊,我在你的代码中发现了一个错误。请放弃我做出以下准确的复制问题:

1) 打开一个草稿文章。

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

3) 在左边,点击 Set Featured Image 链接。

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

5) 你会看到 jQuery 函数不起作用。

但是,如果您在发布编辑加载后首先点击了 Set featured image 链接,该功能将会起作用。你能复制这个问题,可能找到一个解决方案吗?对不起,发布这个作为答案,但这个平台目前没有提供一个更好的选择。

编辑:有人可以让我们来了解这个。你可以通过在他的回答中添加评论来做到这一点,我认为应该给他一个通知。我不能写评论,因为我没有足够的声誉

编辑 2:如果你想绝对地避免这个问题,你可以删除弹出窗口中的 「设置精选图像」 链接,并强制用户使用侧边栏链接 (如 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;
}

正如我所说,这是一个绝望的修复,直到有一个解决方案发布的主要代码。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。