Answers:
我先前的答案有两个小错误:
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
}
Add Media
按钮时,此代码非常精美,但单击时则无效Set featured image
。有没有办法使其也在那里工作?
wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});
则更合适。
上面的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会加载完整大小的图像。从那以后我就启用了中等大小。
@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;
}
就像我说的那样,这是一个绝望的解决方法,直到为主要代码发布解决方案为止。
对于大多数这些解决方案,我最不满意的是,它在很多屏幕上都在闪烁,如果单击“ 特色图像”,它将恢复为显示所有图像。经过一番搜索,我认为找到了一个永久性的解决方案(感谢Ü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
}
新版本的wordpress 对于媒体上传器使用了不同的方法(高级Backbonejs)。检查此插件中的代码,因为它适用于WordPress的新版本。