将菜单项添加到Wordpress 3.5 Media Manager


34

如何在新的Wordpress 3.5 Media Manager左侧栏中的“从URL插入”下方添加新菜单项?

我一直在研究主干js,并尝试用自己的JS将其插入,但没有成功。

编辑2:这似乎可以解决问题:

http://sumtips.com/2012/12/add-remove-tab-wordpress-3-5-media-upload-page.html

它应该用于简单的东西,但是我想用Javascript做同样的事情也是可能的。如果有一个有关新媒体管理器内部工作原理的教程/说明,那就太好了。


您的新菜单应该做什么?添加菜单项不是主要问题,并且您处在正确的轨道上,但是如果应该使菜单显示与默认视图不同的任何东西,只需更改设置,Backbone就需要菜单项的视图...并且多数民众赞成在我也卡住了...
ungestaltbar 2012年

单击菜单项应该显示不同的视图。要显示菜单项将是第一步
erezie

1
关于我的150点bouny:希望继续保持原始海报的目标,即使用基于JS的方法在“从URL插入”下面添加新的“状态”菜单项,并将新视图关联到“帖子编辑器”的主要媒体模式中。
Scott Kingsley Clark

@erezie,您是否可以将答案标记为Fabien Quatravaux提供的答案?
Scott Kingsley Clark

Answers:


19

好吧,我认为我有一个非常接近答案的东西:

我把我的代码放在要点上

结果如下: 自定义菜单屏幕截图

我构建了几个Backbone对象来尊重MVC模式:controller.Custom负责执行所有逻辑,view.Toolbar.Custom处理工具栏按钮以及view.Custom显示内部UI。


2
到目前为止缺少什么?
kaiser

+1好开始!但是,是的,快照不必使用实现来知道它的功能,而是非常方便的。同样,将注释行添加//build an empty view (needs more work)到答案的内容中。
brasofilo

我添加了屏幕截图以显示结果。现在要做的下一件事是实现视图本身,该视图将显示HTML组件并对用户交互做出反应。
Fabien Quatravaux

这看起来很酷,这绝对是一个开始!值得一提的赏金,但如果您有需要,可以随时将其提升到一个新的水平。
斯科特·金斯利·克拉克

谢谢你的赏赐斯科特!我肯定会更深入一点,因为在工作中需要它。我将在可用的代码尽快寄回这里。
Fabien Quatravaux

10

我正在为“路由器菜单”添加一个按钮(向“媒体库”添加一些权限),但是系统是相同的。

<script type="text/javascript">
    jQuery(window).on('load', function() {
        var media   = window.wp.media,  
        Attachment  = media.model.Attachment,
        Attachments = media.model.Attachments,
        Query       = media.model.Query,
        l10n = media.view.l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n,
        NewMenuItem;

        jQuery(document).on( 'click', '.insert-media', function( event ) {
            var workflow = wp.media.editor.get();
            var options = workflow.options;
            if( undefined == NewMenuItem ) {
                NewMenuItem = new wp.media.view.RouterItem( _.extend( options, { text: 'New Item!' } ) );
                workflow.menu.view.views.set( '.media-menu', NewMenuItem, _.extend( options, { add: true } ) );
            }

        });
    });
</script>

现在,它什么也没做。那是下一步!


2
有运气吗?我真正想看到的是基于JS的解决方案,而不是原始海报编辑中已经提到的iframe PHP解决方案和另一个答案
Scott Kingsley Clark

7

您可以挂接到 media_upload_tabs过滤器以添加选项卡。这是网络共享媒体插件使用的方法:

function wpse_76980_add_upload_tab( $tabs ) {
    $newtab = array( 'tab_slug' => 'Tab Name' );
    return array_merge( $tabs, $newtab );
}
add_filter( 'media_upload_tabs', 'wpse_76980_add_upload_tab' );

然后,您可以连接到media_upload_tab_slug操作(tab_slug如上所示)以显示选项卡内容:

function wpse_76980_media_upload() {
    // display tab contents
}
add_action( 'media_upload_tab_slug', 'wpse_76980_media_upload' );

2
这是添加标签的旧方法。尽管它仍在工作,但我怀疑WP正在远离它。
珍妮

2
@Jenny,我想我们可以指望这个过滤器了。相关票证。(:oh和+1,漂亮的片段:)
brasofilo 2012年

3

我没有解决方案,但有提示。字符串来自数组。您可以通过hook进行过滤media_view_strings。单击后的模式框是一个javascript,自WP 3.5起就使用lobb.js构建。请参阅中/wp-includes/js/media-views.js的解决方案。Backbone对我来说也是新的,脚本有很多源代码。


这是一个很好的提示,但我认为这没有实现。的media.view.settingsJS变种可以通过一个PHP滤波器进行调整以添加新的选项卡,但随后这些标签经由iframe呈现(参见createIframeStates在方法media-views.js)。
Fabien Quatravaux

也许您可以向您的博客添加要点,以便在媒体视图内添加一个简单的链接,并在单击该链接时执行自定义操作?您当前的要领非常复杂,并且有很多自定义操作。
bueltge

不幸的是,我没有找到另一种更简单的方法来实现这一目标。这段代码仅做一件基本的事情:在左侧添加一个自定义菜单项,并带有其自己的内容视图,工具栏和控制器。所有这些构造都是构建Backbone所需的视图和控制器所必需的。但是,如果您有一个更简单的解决方案,请随时提出我的要旨。
Fabien Quatravaux

是的,我已经看到并测试了,效果很好。但我认为这很好,您还可以在默认媒体屏幕内仅为按钮或链接和回调函数创建要点,而不是示例中的其他部分。
bueltge
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.