如何使用自定义图像集向媒体上传管理器添加新标签?


18

我想添加新标签以上传管理器,并在列表中添加来自

theme_folder/images/patterns

我尝试过类似的操作来添加标签,但是它对我不起作用,因为它是在媒体管理器的侧面添加了标签,但是在图像上传时该标签不可见。

function custom_media_upload_tab_name( $tabs ) {
    $newtab = array( 'tab_slug' => 'Patterns' );
    return array_merge( $tabs, $newtab );
}

add_filter( 'media_upload_tabs', 'custom_media_upload_tab_name' );

function custom_media_upload_tab_content() {
    // Add you content here.
    echo 'Hello content';
}
add_action( 'media_upload_tab_slug', 'custom_media_upload_tab_content' );

确切地说,这是我要添加新选项卡的位置,在该选项卡中,我要列出主题文件夹中的图像。

在此处输入图片说明

我知道媒体管理器JS需要为此进行重写,但是老实说,我不知道从哪里开始。看来我需要为媒体管理器编写一个全新的模板才能实现此目的。

我仔细研究了所有建议,但似乎没人在读这个问题。正如建议的那样,“我尝试过类似的操作来添加选项卡,但是它对我不起作用,因为它是在媒体管理器的侧面添加了选项卡,但是在图像上载时,该选项卡不可见。”

因此,目前还没有人能够找到解决方案。

Answers:


6

这是一个老话题,但对我而言仍然很重要。我一直在摆弄,并想出了用于在此处添加媒体标签的代码,也许有人想继续了解标签的内容如何?:)

add_action('admin_enqueue_scripts', function(){
    wp_enqueue_script( 'my-media-tab', plugin_dir_url( __FILE__ ) . '/js/mytab.js', array( 'jquery' ), '', true );
});

然后是js文件:

var l10n = wp.media.view.l10n;
wp.media.view.MediaFrame.Select.prototype.browseRouter = function( routerView ) {
    routerView.set({
        upload: {
            text:     l10n.uploadFilesTitle,
            priority: 20
        },
        browse: {
            text:     l10n.mediaLibraryTitle,
            priority: 40
        },
        my_tab: {
            text:     "My tab",
            priority: 60
        }
    });
};

编辑:好的,所以。对于处理内容,wp.media尚未找到一种很好的方法。我当前的解决方案是2个许可人,一个用于打开媒体库,另一个用于单击媒体路由器菜单。

jQuery(document).ready(function($){
    if ( wp.media ) {
        wp.media.view.Modal.prototype.on( "open", function() {
            if($('body').find('.media-modal-content .media-router a.media-menu-item.active')[0].innerText == "My tab")
                doMyTabContent();
        });
        $(wp.media).on('click', '.media-router a.media-menu-item', function(e){
            if(e.target.innerText == "My tab")
                doMyTabContent();
        });
    }
});

函数doMyTabContent(); 就像

function doMyTabContent() {
    var html = '<div class="myTabContent">';
    //My tab content here
    html += '</div>';
    $('body .media-modal-content .media-frame-content')[0].innerHTML = html;
}

我非常确定这可以用更加精致的方式来完成。谁阅读了本文并有更好的解决方案,请填写:-)


为此,thnx将对此进行调查。古老与否,从未解决过。这正是我要求的 prntscr.com/kse5yk。做得好!
本恩

您是否尝试将这个wordpress.stackexchange.com/a/190604/67176和您的标签创建结合在一起?我99%确信它可以正常工作,特别是如果选项卡具有相同的ID。
本恩

1
是的,我首先研究了该问题,但我并不是该解决方案随附的iframe解决方案的忠实拥护者。通过iframe消息传递接收图像数据。显示内容是一回事,而处理动作是另一回事。:)也许我错过了一些东西。
gubbfett

您好@Benn再次陷入wp.media噩梦。我上面在执行“ doMyTabContent”时提供的代码仅在一个事件上触发。例如:加载帖子,单击添加特色图片并关闭。单击此按钮后,为帖子添加媒体,并且不会加载任何内容,这可能是因为wp.media在新实例中(选项卡仍在其中)。我不确定如何继续前进。您在添加标签和以某种方式插入媒体方面是否取得了任何进展?想分享一些代码吗?:)
gubbfett

@gubbfett您是否找到了解决方案?
RaajTram

5

根据WordPress Codex,您可以在媒体上传器中添加自定义标签,如下所示:

// add the tab
add_filter('media_upload_tabs', 'my_upload_tab');
function my_upload_tab($tabs) {
    $tabs['mytabname'] = "My Tab Name";
    return $tabs;
}

// call the new tab with wp_iframe
add_action('media_upload_mytabname', 'add_my_new_form');
function add_my_new_form() {
    wp_iframe( 'my_new_form' );
}

// the tab content
function my_new_form() {
    echo media_upload_header(); // This function is used for print media uploader headers etc.
    echo '<p>Example HTML content goes here.</p>';
}

希望对您有帮助。


7
为了清楚起见,该选项卡未添加到模式框的顶部,而是添加到左侧边栏。我找不到将标签实际添加到“插入媒体”标签顶部的方法。由于内容已插入到iframe中,因此尝试使用已经可用的CSS样式也遇到了问题。这可能意味着您需要添加自己的CSS才能正确显示图像。只是为了完成答案,您可以使用php scandir()函数检索图像文件夹内的所有项目。
gdaniel 2015年

-1
   function axcoto_genify_media_menu($tabs) {
            $newtab = array('genify'  => __('Axcoto Genify', 'axcotogenify'));
            return array_merge($tabs, $newtab);
            }
            add_filter('media_upload_tabs', 'axcoto_genify_media_menu');

           array('genify' => __('Axcoto Genify', 'axcotogenify'));


        function axcoto_genify_media_process() {
        media_upload_header();
        echo 'hello';
        }
        function axcoto_genify_media_menu_handle() {
        return wp_iframe( 'axcoto_genify_media_process');
        }



 if ( ( is_array( $content_func ) && ! empty( $content_func[1] ) && 0 === strpos( (string) $content_func[1], 'media' ) ) || 0 === strpos( $content_func, 'media' ) )
        wp_enqueue_style( 'media' );

1
您的代码充满语法错误。请使用正确的 php语法,因为您使用的语法甚至不存在于php中。另外,请解释您的代码做什么以及如何工作。谢谢
Pieter Goosen 2015年

我刚刚编辑了代码。它的工作代码。尝试此代码。
萨拉斯2015年

2
请重新阅读我的评论,但跳过语法部分。转储代码不是质量的答案。请添加一个解释你的代码是如何工作以及它做什么
彼得·古森
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.